pracuję przez SICP - jednym ćwiczeniem jest wdrożenie foreach (doseq). To jest ćwiczenie akademickie. W Clojure, to co wymyśliłem:implementowanie foreach (doseq) w clojure
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
ale jestem trochę mętna o jeśli do
oszukuje, bo do
jest szczególną formą w Clojure i nie sądzę, że ma coś podobnego wprowadzono jeszcze w SICP. czy jest bardziej minimalistyczna odpowiedź?
Oto kolejna próba który tylko wykonuje proc ostatniego elementu:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
Masz się dobrze. SICP jest tutaj kuszący. Zobacz bardzo mały tekst przypisu 3 w: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#call_footnote_Temp_323. Za każdym razem, gdy robisz "cond" w SICP, masz implicite "zacząć" w grze dla każdej klauzuli "cond". A "zacząć" w SICP to prawie "robić" w Clojure. – dyoo