【发布时间】:2016-05-14 20:01:08
【问题描述】:
我正在编写与 clojure 中的“reduce”功能相同的代码 ex) (reduce + [1 2 3 4]) = (+ (+ (+ 1 2) 3) 4)。
(defn new-reduce [fn coll]
(def answer (get coll 0))
(loop [i 1]
(when (< i (count coll))
(def answer (fn answer (get coll i)))
(recur (inc i))))
answer)
在我的代码中,我使用了全局变量,对我来说,这种方式更容易理解。显然,人们说最好将全局变量更改为局部变量,例如 let。所以我尝试了..
(defn new-reduce [fn coll]
(let [answer (get coll 0)]
(loop [i 1]
(when (< i (count coll))
(fn answer (get coll i))
(recur (inc i))))))
说实话,我对 let 函数并不是很熟悉,即使我尝试了非常简单的代码,它也不起作用。有人可以帮我修复这段代码并帮助我理解 let (局部变量)是如何工作的吗?谢谢你。 (ps.在 let 函数中有循环的非常简单的代码也很棒)。
【问题讨论】:
-
任何时候您在
let中都有loop,let绑定将在loop的所有迭代中保持不变。请记住,let绑定是绑定,而不是变量。
标签: loops clojure global-variables local-variables let