Я работаю через SICP - одно упражнение - реализовать foreach (доза). Это академическое упражнение. В Clojure, это то, что я придумал:внедрение foreach (доза) в clojure
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
, но я немного мутная о том, если do
обман, потому что do
является особой формой в Clojure и я не думаю, что что-то подобное есть был введен еще в SICP. есть более минималистский ответ?
Вот еще одна попытка, которая выполняет только прок от последнего элемента:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
Все в порядке. SICP здесь сложный. См. Очень маленький текст сноски 3 в: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#call_footnote_Temp_323. Каждый раз, когда вы выполняете 'cond' в SICP, у вас есть неявное' begin' в игре для каждого предложения 'cond'. И «начать» в SICP в значительной степени «делать» в Clojure. – dyoo