【发布时间】:2012-03-16 09:35:28
【问题描述】:
我正在研究 SICP - 一项练习是实施 foreach (doseq)。 这是一项学术练习。在clojure中,这是我想出的:
(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在这里很棘手。请参阅以下脚注 3 的极小文本:mitpress.mit.edu/sicp/full-text/book/…。每当您在 SICP 中执行
cond时,对于cond的每个子句,您都有一个隐含的begin。 SICP 中的begin与 Clojure 中的do差不多。
标签: recursion clojure lisp scheme sicp