(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
मैं भूल गया हूं कि मुझे सवाल पूछने के लिए प्रेरित करने के लिए प्रेरित किया गया था, लेकिन मैं सिर्फ इस तरह के कार्यों के लिए मूर्खतापूर्ण क्लोजर लिखने का बेहतर विचार प्राप्त करना चाहता था। मुझे लगता है कि आपका उत्तर उस तरह की जानकारी प्रदान करने का अच्छा काम करता है जिसे मैं ढूंढ रहा था। –
ग्रोवी, धन्यवाद! –