समय-समय पर मैं उस समस्या से ठोकर खा रहा हूं जिसे मैं व्यक्त करना चाहता हूं "कृपया अंतिम तर्क दो बार उपयोग करें", उदा। पॉइंटफ्री शैली लिखने या लैम्ब्डा से बचने के लिए। जैसेहास्केल में "पुन: उपयोग" तर्क के लिए चाल?
sqr x = x * x
रूप
sqr = doubleArgs (*) where
doubleArgs f x = f x x
लिखा जा सकता है या यह थोड़ा और अधिक जटिल समारोह (this question से लिया गया) पर विचार करें:
ins x xs = zipWith (\ a b -> a ++ (x:b)) (inits xs) (tails xs)
मैं इस कोड pointfree लिख सकता है अगर वहाँ की तरह एक समारोह थे यह:
ins x = dup (zipWith (\ a b -> a ++ (x:b))) inits tails where
dup f f1 f2 x = f (f1 x) (f2 x)
लेकिन जैसा कि मुझे होउगल में डबलअर्ग या डुप्लिकेट नहीं मिल रहा है, इसलिए मुझे लगता है कि मुझे यहां एक चाल या मुहावरे याद आ सकती है।
और 'पॉइंटफ्री' के अनुसार, 'dup'' liftM2' होने के लिए काम करता है।मुझे वास्तव में कार्यों के लिए मोनैड इंस्टेंस पर बेहतर संभाल करने की आवश्यकता है। –
ऐसी समस्याओं को हल करने के लिए ** ** ** ** देने के लिए दोनों का धन्यवाद। बीटीडब्ल्यू मैंने 'sqr = (*) <$> आईडी <*> आईडी' की कोशिश की और यह भी काम करता है :-) – Landei
' ए ++ (x: b) 'आपके विकल्प से 3 वर्ण कम है, शायद यही कारण है कि कुछ लोग इसे पसंद करते हैं? –