sto lavorando attraverso SICP - un esercizio è quello di implementare foreach (doseq). Questo è un esercizio accademico. In clojure, questo è ciò che mi si avvicinò con:implementazione foreach (doseq) in clojure
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
ma, io sono un po 'torbida circa se do
è barare, perché do
è una forma speciale di clojure e non penso nulla di simile che ha stato introdotto ancora in SICP. c'è una risposta più minimalista?
Ecco un altro tentativo che esegue solo proc sull'ultimo elemento:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
Stai bene. SICP si sta facendo furbetto qui. Vedere il testo molto piccolo della nota 3 in: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#call_footnote_Temp_323. Ogni volta che esegui un 'cond' in SICP, hai un implicito' begin' in gioco per ogni clausola di 'cond'. E 'begin' in SICP è praticamente' do' in Clojure. – dyoo