2010-01-14 19 views
15

मैं हमेशा सोचा है कि क्यों हम अजगरक्यों अजगर हाइफ़न

में समारोह के नाम और चर नाम के बीच में हाइफ़न उपयोग नहीं कर सकते करने की कोशिश की करने के बाद लिस्प और Clojure, जहां हाइफन की अनुमति है की तरह कार्यात्मक प्रोग्रामिंग भाषाओं की अनुमति नहीं है। क्यों पाइथन ऐसा नहीं करता है।

# This won't work -- SyntaxError 
def is-even(num): 
    return num % 2 

# This will work 
def is_even(num): 
    return num % 2 

मुझे यकीन है कि कुछ कारणों से सर गिडो ने ऐसा किया होगा। मैं googled लेकिन जवाब खोजने के लिए प्रबंधन नहीं कर सका। क्या कोई इस पर कुछ प्रकाश डाल सकता है?

+0

वह वाक्यविन्यास त्रुटि होती है क्योंकि 'is' एक कीवर्ड है। 'Def maybe-even (num)' में, वाक्यविन्यास त्रुटि हाइफ़न की वजह से होगी। – balpha

+0

मैंने हमेशा सोचा है कि क्यों ASCII में "-" और "_" है। जबकि आप "-" के उपयोग के बारे में सोच रहे हैं, क्या आप भी "_" के लिए उपयोगों के बारे में सोच सकते हैं? दरअसल, मेरे पास बहुत सारे विराम चिह्न हैं जो इस के रूप में महत्वपूर्ण हैं। "#" और "♯" अलग क्यों है? क्या आप इसके बारे में भी सोच सकते हैं? मुझे हमेशा यह अजीब लगता है कि हम टिप्पणियों के लिए "♯" का उपयोग नहीं कर सकते हैं। –

+0

(@atifh, कृपया http://meta.stackexchange.com/questions/35582/inaccurate-revision-Information - क्या आपने टैग को 'पायथन' से 'पायथन' में बदल दिया है? और शायद एक पीछे की बैकटिक भी हटा दी गई है शीर्षक?) – Arjan

उत्तर

35

क्योंकि हाइफ़न को घटाव ऑपरेटर के रूप में उपयोग किया जाता है। कल्पना कीजिए कि आप एक is-even समारोह हो सकता था, और उसके बाद आप इस तरह कोड था:

my_var = is-even(another_var) 

is-even(another_var) समारोह is-even के लिए एक कॉल, या इसे is नामक एक चर से समारोह even का परिणाम घटाकर है ?

लिस्प बोलीभाषा में यह समस्या नहीं है, क्योंकि वे उपसर्ग नोटेशन का उपयोग करते हैं। उदाहरण के लिए, वहाँ

और के बीच
(is-even 4) 

(- is (even 4)) 

Lisps में स्पष्ट अंतर है।

+8

लिस्प के संबंध में, उपसर्ग पहलू अप्रासंगिक है; अंतर यह है कि "-" को एक अलग टोकन नहीं माना जाता है; अक्षरों का कोई संयोजन और 'सामान्य' विराम चिह्न (उदा। नहीं ")") एक टोकन बना सकता है। एक इंफिक्स भाषा ऐसे नियमों के साथ पूरी तरह से अच्छी तरह से काम कर सकती है; फिर "है-यहां तक ​​कि (another_var)' "एक फंक्शन कॉल होगा और" 'है - यहां तक ​​कि (another_var)' "घटाव होगा, जैसा लिस्प्स में है (है - यहां तक ​​कि 4) 'एक अलग एस-अभिव्यक्ति है 'से (यहां तक ​​कि 4)'। –

+0

लिस्प में यह समस्या नहीं है क्योंकि "-" सिर्फ एक चरित्र है। –

+0

मैं देख सकता हूं कि '-' का उपयोग माइनस ऑपरेटर के लिए किया जाना चाहिए और यह कि इन्फिक्स नोटेशन पठनीयता के लिए अच्छा है (उन लोगों के लिए जो उपसर्ग नोटेशन कैलकुलेटर के साथ बड़े नहीं होते हैं)। हालांकि, क्या शून्य और अन्य ऑपरेटरों के आसपास सफेद जगह की अनुपस्थिति की अनुमति देने के लिए एक अनिवार्य कारण है? पाइथन में व्हाइटस्पेस पहले से ही महत्वपूर्ण है, इसलिए ऑपरेटर के चारों ओर व्हाइटस्पेस के उपयोग को मजबूर क्यों नहीं किया जाता है, जो नामों में हाइफ़न के उपयोग की अनुमति देता है, जो मेरी राय में अंडरस्कोर और ऊंट WTFCase दोनों से सम्मेलन टाइप करने के लिए एक और अधिक पठनीय और आसान है, जिसे मैं बराबर मात्रा में नापसंद। –

7

क्योंकि यह पार्सर को और भी जटिल बना देगा। यह प्रोग्रामर के लिए भी भ्रमित हो जाएगा।

def is-even(num): पर विचार करें: अब, यदि is एक वैश्विक चर है, तो क्या होता है?

यह भी ध्यान दें कि - पायथन में घटाव ऑपरेटर है, इसलिए आगे पार्सिंग जटिल होगा।

0
is-even(num) 

में एक हाइफ़न है? मैंने सोचा कि यह फ़ंक्शन द्वारा लौटाए गए मान का एक घटाव है, यहां तक ​​कि मान से तर्क संख्या के साथ भी।

जैसा कि @jdupont कहता है, पार्सिंग मुश्किल हो सकती है।

मार्क

+0

'is' एक कीवर्ड है, इसमें कोई मूल्य नहीं हो सकता है :) – balpha

+1

पार्सिंग मुश्किल हो सकती है। किसी कीवर्ड से मूल्य घटाकर पार्सर को शिकायत करने की संभावना है। –

9

क्योंकि अजगर इन्फ़िक्स संकेतन का उपयोग करता गणना और एक हाइफन का प्रतिनिधित्व करने के लिए और एक शून्य से ठीक उसी ascii कोड है। आपके पास संदिग्ध मामले हो सकते हैं जैसे:

a-b = 10 
a = 1 
b = 1 

c = a-b 

उत्तर क्या है? 0 या 10?

+0

मुझे यह मिला। यह बहुत सीधी लगता है। इन्फिक्स नोटेशन वाली कोई भी भाषा हाइफ़न का उपयोग नहीं कर सकती है। हाइफ़न केवल भाषा में अनुमत है जो एस-अभिव्यक्ति का समर्थन करता है। :) – aatifh

+1

वैसे, एक प्रोग्रामिंग भाषा जिसका अपना चरित्र सेट यूनिकोड (वे आ रहे हैं) आसानी से एक हाइफ़न और एक ऋण चिह्न के बीच अंतर कर सकते हैं। समस्या यह है कि बहुत से भाषाएं हाइफ़न और माइनस संकेतों के बीच, उनके चरित्र सेट में अंतर नहीं कर सकती हैं। यह चरित्र सेट की गरीबी है, न कि व्यक्तित्व की गरीबी। –

+0

आप सही हैं, हालांकि अगर कोई इसका लाभ उठाता है और इसे अपने पहचानकर्ताओं में इस्तेमाल करता है तो वह क्षमता खराब होगी। – JPvdMerwe