我正在通过 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))))