【发布时间】:2018-06-04 00:30:28
【问题描述】:
我正在尝试解决4clojure.com 上的一个问题,我应该在不使用count 的情况下计算集合中元素的数量。我尝试了两种使用for 和let 的方法,我觉得它们应该可以工作,但似乎for-loop 一直在重置let。
(#(for [x % :let [y 0]] (inc y)) [1 2 3 4 5])
;; which returns
(1 1 1 1 1)
(#(let [y 0] (for [x %] (inc y))) [1 2 3 4 5])
;; which returns
(1 1 1 1 1)
所以我的问题是为什么会发生这种情况,以及如何让我的“变量”为集合中的每个项目保持递增。只是说变量这个词就让我想知道我是否正在尝试制作一些不能可变的东西,但我仍然觉得这应该可行。
【问题讨论】:
-
在学习 clojure 时要记住的一件事是
for不是一个循环结构——它是一个列表推导式,用于创建列表。所以,当你想真正循环时,通常最好使用loop。回顾这个,我使用了reduce,除了纯递归之外,它是解决问题的最“函数式编程”方式(我的意思是,比显式循环更重要)。干杯,玩得开心!
标签: variables for-loop clojure let