शायद आप निम्न पसंद Semantic Editor Combinators के बारे में पढ़ने के लिए। वहाँ से result
Combinator लें:
result :: (output -> output') -> (input -> output) -> (input -> output')
result = (.)
result
Combinator एक समारोह लेता है और एक अन्य फ़ंक्शन के परिणाम पर यह लागू होता है। अब उन कार्यों को देखकर हमने:
filter :: (a -> Bool) -> [a] -> [a]
length :: [a] -> Int
अब, length
[a]
के लिए लागू होता है; जो, ऐसा होता है, परिणाम foo :: [a] -> [a]
के परिणाम का परिणाम है। तो,
result length :: ([a] -> [a]) -> ([a] -> Int)
लेकिन filter
का परिणाम वास्तव में एक [a] -> [a]
समारोह है, इसलिए हम filter
के परिणाम के result length
लागू करना चाहते हैं:
number_of_elements = result (result length) filter
स्रोत
2011-12-23 23:42:38
अपने लिए "Pointfree शैली" कहा जाता है क्या देख रहे हैं। इसके बारे में यहां एक विकी है: http://www.haskell.org/haskellwiki/Pointfree। यह आपको उल्लू की तरह सभी चाल सिखाता है: '((।) $ (।)) 'और डॉट:' ((।)। (।)) '। हालांकि मैं व्यक्तिगत रूप से इस शैली की सिफारिश नहीं करता। –
मैं यह देखने के लिए थोड़ा सा खेल रहा हूं कि यह कैसे काम करता है, लेकिन आंशिक रूप से पॉइंटफ्री शैली 'number_of_elements f = length का उपयोग करके। फिल्टर एफ'। यह आमतौर पर सबसे अधिक पठनीय है। –
यह एक ऐसा कार्य है जिसे मैं शायद ही कभी परिभाषित करना परेशान करता हूं, क्योंकि 'लंबाई (फ़िल्टर एफ एक्सएस) 'स्पष्ट रूप से,' number_of_elements f xs' से पढ़ने के लिए आसान है। उत्तरार्द्ध के लिए मुझे यह समझने की आवश्यकता है कि आपका कार्य आपकी कार्य परिभाषा, दस्तावेज़ीकरण या इसे प्रकार से कहकर देखकर क्या करता है; जबकि पूर्व दो कार्यों के एक सीधा संयुक्त उपयोग है जो मैं पहले से समझता हूं-और यह लिखने के लिए भी छोटा है! मैं इसे केवल 'जहां' बाध्यकारी, या एक अप्रत्याशित मॉड्यूल फ़ंक्शन के रूप में एक सहायक फ़ंक्शन के रूप में परिभाषित करता हूं- और तब भी तभी होता है जब यह अन्य कार्यों के लिए तर्क हो। –