2011-09-11 12 views
11

मैंने पाया हास्केल में एक दिलचस्प पुस्तकालय एक 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)))) 
+2

एसवाईबी पेपर सह-लेखक राल्फ लामल के काम को हस्सेल में स्ट्रेटगो को एम्बेड करने के लिए (अलग) सह-लेखक जोओस्ट विसार के साथ एक निरंतरता थी। क्लोजर में नेस्टेड संरचनाओं को अपडेट करने के लिए आपको अपने डेटाटाइप जेनेरिक पक्ष की तुलना में एसईबी के "ट्रैवर्सल कंट्रोल" पक्ष की आवश्यकता होगी, ताकि आप पूछ सकें कि क्या किसी ने क्लोजर में स्ट्रेटगो को एम्बेड किया है या नहीं। मुझे क्लोजर नहीं पता है और कुछ वेब खोजों का सुझाव है कि किसी ने अभी तक यह नहीं किया है। योजना में स्ट्रेटगो ट्रैवर्सल के निश्चित रूप से एम्बेडिंग हैं जो एसईबी की तुलना में बंदरगाह के लिए आसान होना चाहिए, मैंने खुद को लिखा है। –

+2

मुझे एसईबी नहीं पता, लेकिन हो सकता है [clojure.walk] (http://richhickey.github.com/clojure/clojure.walk-api.html) क्या आप ढूंढ रहे हैं? –

उत्तर

4

Clojure में इस के लिए निकटतम शायद कार्य (Assoc-इन, अद्यतन-इन, dissoc "में" -इन)।

ये फ़ंक्शंस आपको गहरा घोंसला, क्लोजर में परिवर्तनों को इंगित करने की अनुमति देता है। हास्केल में इन कार्यों के बराबर कोई नहीं है क्योंकि वे गतिशील टाइपिंग पर भारी निर्भर हैं।

1

जब यह सवाल पहले पूछा गया था, तो वे चारों ओर नहीं थे, लेकिन मेरा मानना ​​है कि transducers प्रोग्रामिंग की एक समान शैली को सक्षम बनाता है। मूल रूप से ट्रांसड्यूसिबल प्रक्रिया फ़ंक्शंस के एक निश्चित सेट को लागू करती है, जो ट्रांसड्यूसर किसी भी ट्रांसड्यूसिबल प्रक्रिया पर जाने के लिए उपयोग कर सकती है।

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