में फोरैच (डोसेक) को कार्यान्वित करना मैं एसआईसीपी के माध्यम से काम कर रहा हूं - एक अभ्यास foreach (doseq) को लागू करना है। यह एक अकादमिक अभ्यास है। clojure में, यह है कि मैं क्या के साथ आया है:क्लोजर
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
लेकिन, मैं एक छोटे से संदिग्ध अगर do
के बारे में धोखा दे रही है हूँ, क्योंकि do
clojure में एक विशेष रूप है और मुझे नहीं लगता है कि ऐसा कुछ है एसआईसीपी में अभी तक पेश किया गया है। क्या कोई और न्यूनतम उत्तर नहीं है?
यहाँ एक और प्रयास है जो केवल पिछले तत्व पर proc निष्पादित करता है:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
आप ठीक हैं। एसआईसीपी यहां ट्रिक्सी है। फुटनोट 3 का बहुत छोटा टेक्स्ट देखें: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#call_footnote_Temp_323। जब भी आप एसआईसीपी में 'कंड' कर रहे हों, तो आपको 'cond' के प्रत्येक खंड के लिए एक अंतर्निहित 'प्रारंभ' मिल गया है। और क्लोजर में एसआईसीपी में 'शुरू' काफी ज्यादा है। – dyoo