2009-07-30 24 views
10

उद्धरण ' क्या है? मैंने करीबी कार्यों के बारे में पढ़ा है और जोड़ समारोह को परिभाषित करने के दो तरीकों को पढ़ा है - करीबी और अनिश्चित। करीबी संस्करण ...'हास्केल फ़ंक्शन नाम में' का अर्थ?

myadd' :: Int -> Int -> Int 
myadd' x y = x + y 

... लेकिन यह उद्धरण के बिना समान रूप से अच्छी तरह से काम करता है। तो ' का बिंदु क्या है?

+1

क्या आपको लगता है कि इसका नाम बदलकर हैस्केल फ़ंक्शन नाम में "का अर्थ"? – EFraim

+1

संभावित डुप्लिकेट [हास्केल में पहचानकर्ताओं में अपोस्ट्रोफ] (http://stackoverflow.com/questions/5673916/apostrophe-in-identifiers-in-haskell) –

उत्तर

21

उद्धरण का अर्थ है हास्केल के लिए कुछ भी नहीं है। यह उस समारोह के नाम का हिस्सा है।

लोग इसे "आंतरिक" कार्यों के लिए उपयोग करते हैं। यदि आपके पास एक ऐसा फ़ंक्शन है जो एक संचयक तर्क का उपयोग कर सूची सूचीबद्ध करता है, तो आपके योग फ़ंक्शन में दो तर्क होंगे। यह बदसूरत है, इसलिए आप दो तर्कों के sum' फ़ंक्शन और sum list = sum' 0 list जैसे एक तर्क के sum फ़ंक्शन बनाते हैं।

संपादित करें, शायद मैं सिर्फ कोड दिखाएगी:

sum' s [] = s 
sum' s (x:xs) = sum' (s + x) xs 

sum xs = sum' 0 xs 

ताकि sum' पूंछ पुनरावर्ती है आप ऐसा करते हैं, और इतना है कि "सार्वजनिक एपीआई" अच्छा लग रही है।

+0

ओह मैं देखता हूं। धन्यवाद !!! – user147056

+1

'sum''' sum' के 'जहां' खंड में भी हो सकता है। – mk12

+0

गलती से अपने रिकर्सिव फ़ंक्शन में मुख्य फ़ंक्शन को कॉल करने से सावधान रहें, यानी 'योग' (x: xs) = sum (s + x) xs'। प्रकार प्रणाली यहां शिकायत करेगी, लेकिन यदि कार्यों के समान प्रकार हैं तो यह खोजना मुश्किल है। – mk12

9

इस उदाहरण में ' चरित्र के लिए कोई विशेष बात नहीं है; यह पहचानकर्ता का सिर्फ एक हिस्सा है। दूसरे शब्दों में, myadd और myadd' विशिष्ट हैं, असंबद्ध फ़ंक्शंस।

परंपरागत रूप से, ' का उपयोग कुछ तार्किक मूल्यांकन संबंधों को दर्शाने के लिए किया जाता है। तो, hypothetical function myadd और myadd' संबंधित होगा myadd'myadd से लिया जा सकता है। यह औपचारिक तर्क और अकादमिक में प्रमाणों से प्राप्त एक सम्मेलन है (जहां हास्केल की जड़ें हैं)। मुझे अंडरस्कोर करना चाहिए कि यह केवल एक सम्मेलन है, हास्केल इसे लागू नहीं करता है।

6

उद्धरण 'हास्केल नामों में सिर्फ एक और अनुमत चरित्र है। इसे अक्सर कार्यों के रूपों को परिभाषित करने के लिए प्रयोग किया जाता है, जिसमें मामले उद्धरण को 'प्राइम' कहा जाता है। विशेष रूप से, हास्केल लाइब्रेरीज़ यह दिखाने के लिए कोट-वेरिएंट का उपयोग करते हैं कि संस्करण सख्त है। उदाहरण के लिए: foldl आलसी है, foldl' सख्त है।

इस मामले में, ऐसा लगता है कि उद्धरण का उपयोग केवल करीबी और अनिश्चित रूपों को अलग करने के लिए किया जाता है।

16

इसे अक्सर "प्राइम" कहा जाता है, इसलिए यह "मैड प्राइम" होगा। आमतौर पर गणना, या एक विकल्प में अगले चरण को नोट करने के लिए प्रयोग किया जाता है।

तो, आप कह सकते हैं

add = blah 
add' = different blah 

या

f x = 
    let x' = subcomputation x 
    in blah. 

यह सिर्फ एक आदत, आदि जावा, सी के लिए पाश के लिए एक में सूचकांक,

के रूप में मैं पूर्णांक का उपयोग कर की तरह

संपादित करें: यह उत्तर अब और अधिक उपयोगी है कि मैंने सभी शब्दों और कोड स्वरूपण को जोड़ा है। :) मैं भूल रहा हूं कि यह WYSIWYG प्रणाली नहीं है!

1

जैसा कि दूसरों ने कहा है, ' में हास्केल के लिए कोई अर्थ नहीं है।यह सिर्फ एक चरित्र है, जैसे कि एक पत्र या संख्या।

' का उपयोग किसी फ़ंक्शन के वैकल्पिक संस्करणों को इंगित करने के लिए किया जाता है (foldl और foldl' के मामले में) या सहायक कार्य। कभी-कभी, आपको फ़ंक्शन नाम पर कई ' भी दिखाई देंगे। फ़ंक्शन नाम के अंत में ' जोड़ना someFunctionHelper और someFunctionStrict लिखने से कहीं अधिक संक्षिप्त है।

इस नोटेशन की उत्पत्ति गणित और भौतिकी में है, जहां, यदि आपके पास f(x) फ़ंक्शन है, तो इसका व्युत्पन्न अक्सर f'(x) के रूप में दर्शाया जाता है।

संबंधित मुद्दे