मैंने पाया हास्केल में एक दिलचस्प पुस्तकालय एक paper by Simon Peyton Jones जो कि एक कार्यात्मक प्रोग्रामिंग में बड़े, गहराई से नेस्टेड डेटा संरचनाओं को अपडेट कर सकते कोड लिखने के लिए एक प्रभावी तरीका की तरह लगता है के आधार पर Scrap Your Boilerplate बुलाया भाषा। यह कोड सक्षम करता है जैसे:Clojure समकक्ष (SYB) "आपका बॉयलरप्लेट स्क्रैप"
incS :: Float -> Salary -> Salary
incS k (S s) = S (s * (1+k))
increase :: Float -> Company -> Company
increase k = everywhere (mkT (incS k))
जो संभावित रूप से बड़ी और जटिल कंपनी डेटा संरचना में सभी के लिए एक निश्चित अनुपात के द्वारा वेतन को प्रभावी ढंग से बढ़ाता है।
क्लोजर में एक ही तरह की प्रोग्रामिंग शैली प्राप्त करने के लिए समकक्ष पुस्तकालय या दृष्टिकोण है?
उदाहरण के लिए, मैं कैसे उदाहरण के Clojure बराबर ऊपर उपयोग लिख सकते हैं:
(defn increase [company k]
(everywhere-in company (transform-map-values :salary #(* % (+ 1 k))))
एसवाईबी पेपर सह-लेखक राल्फ लामल के काम को हस्सेल में स्ट्रेटगो को एम्बेड करने के लिए (अलग) सह-लेखक जोओस्ट विसार के साथ एक निरंतरता थी। क्लोजर में नेस्टेड संरचनाओं को अपडेट करने के लिए आपको अपने डेटाटाइप जेनेरिक पक्ष की तुलना में एसईबी के "ट्रैवर्सल कंट्रोल" पक्ष की आवश्यकता होगी, ताकि आप पूछ सकें कि क्या किसी ने क्लोजर में स्ट्रेटगो को एम्बेड किया है या नहीं। मुझे क्लोजर नहीं पता है और कुछ वेब खोजों का सुझाव है कि किसी ने अभी तक यह नहीं किया है। योजना में स्ट्रेटगो ट्रैवर्सल के निश्चित रूप से एम्बेडिंग हैं जो एसईबी की तुलना में बंदरगाह के लिए आसान होना चाहिए, मैंने खुद को लिखा है। –
मुझे एसईबी नहीं पता, लेकिन हो सकता है [clojure.walk] (http://richhickey.github.com/clojure/clojure.walk-api.html) क्या आप ढूंढ रहे हैं? –