我正在通過SICP - 一個練習是實施foreach(doseq)。 這是一個學術練習。 Clojure中,這是我想出了:clojure執行foreach(doseq)
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
但是,我有點陰暗一下如果do
被欺騙,因爲do
是Clojure中的一種特殊形式,我不認爲這樣的事情有已在SICP中推出。 有更簡約的答案嗎?
這裏的另一種嘗試,只有最後一個元素上執行PROC:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
你很好。 SICP在這裏很棘手。請參閱http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#call_footnote_Temp_323中腳註3的非常小的文字。無論何時,當你在SICP中做一個'cond'時,你都會在'cond'的每個子句中都有一個隱含的'begin'。在Clojure中,'開始'在SICP中'非常'。 – dyoo 2012-02-27 04:29:34