estoy trabajando a través de SICP - un ejercicio es implementar foreach (doseq). Este es un ejercicio académico. En clojure, esto es lo que ocurrió:implementando foreach (doseq) en clojure
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
pero, yo soy un poco turbia sobre si do
está engañando, porque do
es una forma especial en clojure y no creo que nada de eso tiene sido introducido aún en el SICP. ¿hay una respuesta más minimalista?
Aquí hay otro intento que sólo ejecuta proc en el último elemento:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
Estás bien. SICP está siendo truculento aquí. Ver el texto muy pequeño de la nota al pie 3 en: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#call_footnote_Temp_323. Cada vez que haces un 'cond 'en SICP, tienes un' begin' implícito en juego para cada cláusula del 'cond'. Y 'begin' en SICP es bastante' do' en Clojure. – dyoo