मैं निम्नलिखित समारोह परिभाषा करने की कोशिश कीइस बिंदु को मुक्त परिभाषा क्यों हास्केल में काम नहीं करती है?</p> <pre><code>relativelyPrime x y = gcd x y == 1 </code></pre> <p>बिंदु से मुक्त:
relativelyPrime = (== 1) . gcd
बहरहाल, यह मुझे निम्न त्रुटि देता है:
Couldn't match type ‘Bool’ with ‘a -> Bool’
Expected type: (a -> a) -> a -> Bool
Actual type: (a -> a) -> Bool
Relevant bindings include
relativelyPrime :: a -> a -> Bool (bound at 1.hs:20:1)
In the first argument of ‘(.)’, namely ‘(== 1)’
In the expression: (== 1) . gcd
In an equation for ‘relativelyPrime’:
relativelyPrime = (== 1) . gcd
मैं नहीं काफी समझना। gcd
दो इंट्स/इंटीजर लेता है, एक इंट्स/इंटीजर देता है, फिर एक इंट/इंटीजर की समानता के लिए '1' की जांच की जाती है। मुझे नहीं पता कि मेरी त्रुटि कहां है।
अच्छी तरह से 'gcd' एक और समारोह का उत्पादन करेगा अगर केवल एक ही तर्क दिया - और अपने point- में मुफ्त संस्करण जिसे आप इस * फ़ंक्शन * को '(== 1)' पर रखते हैं, जो निश्चित रूप से फ़ंक्शंस को प्रबंधित करने के बारे में नहीं जानता है;) – Carsten
शायद आप समझते हैं कि जब आप पहले * एक * बिंदु * हटाते हैं: 'सापेक्षप्रिम x = (= = 1)। जीसीडी एक्स' यह काम करता है!अब आप नहीं * हटाने * 'अब x' कर सकते हैं के रूप में यह * * करने के लिए' gcd' तेजी से जुड़ा हुआ है - आप सकता है अगर आप था '(== 1) $ gcd x' – Carsten
@ कार्स्टन की टिप्पणी सही है। एक विकल्प का उपयोग करने के '' gcd' एक एकल तर्क समारोह में बदलने के लिए uncurry' (दो पूर्णांकों का टपल लेने) होगा। – psmears