2015-12-16 9 views
5
(defn unfold [step seed] 
    (if-let [[val new-seed] (step seed)] 
    (cons val (lazy-seq (unfold step new-seed))) 
    nil)) 

उदाहरण उपयोग:क्या क्लोजर "खुला" है?

(defn fib-step [[x y]] [x [y (+ x y)]]) 
(take 10 (unfold fib-step [0 1])) ;=> (0 1 1 2 3 5 8 13 21 34) 

(defn decreasing [x] (if (neg? x) nil [x (dec x)])) 
(unfold decreasing 5) ;=> (5 4 3 2 1 0) 

इस या कुछ और की तरह यह clojure मानक में मौजूद हैं (या अधिक इस्तेमाल किया) libs करता है? यदि नहीं, तो क्या कोई कारण है?

http://www.matlux.net/blog/2014/05/04/anamorphic-adventure-in-clojure

उत्तर

4

नहीं है, unfold Clojure में लागू नहीं किया गया: निकटतम मैंने पाया इस ब्लॉग पोस्ट है। यह amalloys flatland.useful लाइब्रेरी द्वारा प्रदान किया जाता है, जिसमें CrossClj के अनुसार व्यापक उपयोग होता है। आपके द्वारा लिंक किए गए ब्लॉग पोस्ट के रूप में देखकर इस विषय की काफी गहरी खोज मिलती है, मुझे संदेह है कि आपके प्रश्न के मुताबिक प्रत्यक्ष उत्तर से संतुष्ट हो सकता है ... क्या आपके मन में कुछ परिदृश्य है जहां iterate अपर्याप्त है? या निराश है कि iterate नाम या व्यवहार में काफी unfold नहीं है?

(defn fib-step [[a b]] [b (+ a b)]) 
(take 10 (map first (iterate fib-step [0 1]))) 

(take-while (complement neg?) (iterate dec 5)) 

मैं इन उदाहरणों के लिए iterate उपयोग करने के लिए क्योंकि iterate कोर का हिस्सा पहले से ही है पसंद करते हैं। मैं लोगों को unfold पसंद कर रहा हूं अगर यह उनसे अधिक परिचित है।

कई पुस्तकालय हैं जो "चीजें जो कोर में होनी चाहिए" जैसे https://weavejester.github.io/medley/medley.core.html प्रदान करती हैं। https://crossclj.info/ पर एक त्वरित खोज https://github.com/amalloy/useful में बताती है flatland.useful.seq/unfold, जो कि मैंने क्लोजर कोर योगदानकर्ता द्वारा एक महान कार्यान्वयन के रूप में उपयोग नहीं किया है और बूट करने के लिए कुछ अन्य शांत सामान के साथ आता है।

+0

मैं भूल गया हूं कि मुझे सवाल पूछने के लिए प्रेरित करने के लिए प्रेरित किया गया था, लेकिन मैं सिर्फ इस तरह के कार्यों के लिए मूर्खतापूर्ण क्लोजर लिखने का बेहतर विचार प्राप्त करना चाहता था। मुझे लगता है कि आपका उत्तर उस तरह की जानकारी प्रदान करने का अच्छा काम करता है जिसे मैं ढूंढ रहा था। –

+0

ग्रोवी, धन्यवाद! –

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