저는 SICP를 통해 작업하고 있습니다. 한 가지 연습은 foreach (doseq)를 구현하는 것입니다. 이것은 학업 수행입니다. do
는 Clojure의 특별한 형태이며 내가 그런 아무것도 있다고 생각하지 않기 때문에, 내가 바람을 피우고 do
경우에 대해 약간 어두운이야,클로저에 foreach (doseq)를 구현하십시오.
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
하지만 : 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에서 볼 수 있습니다. SICP에서'cond'를 할 때마다,'cond'의 각 절에 대해 암시 적으로'begin'이 있습니다. 그리고 SICP에서의'begin'은 Clojure에서'do'입니다. – dyoo