Loops 从循环中获取值(Clojure)
如果我做一个循环,怎么可能在每次循环中得到标准中变量的值呢?我不是说在屏幕上打印它们,因为只要你在一个循环中,值就会返回到循环中,而不会出来,唯一进入标准输出的实际上是结束值。例如:Loops 从循环中获取值(Clojure),loops,clojure,Loops,Clojure,如果我做一个循环,怎么可能在每次循环中得到标准中变量的值呢?我不是说在屏幕上打印它们,因为只要你在一个循环中,值就会返回到循环中,而不会出来,唯一进入标准输出的实际上是结束值。例如:(loop[x0](if(
(loop[x0](if(
因此,我只在循环结束时获得1234567890,但我还需要0、1、2、3和4到标准输出。那么,loop
不是一个循环,而是一个递归点。如果要收集所有值,可以使用某种累加器:
(loop [x 0 acc []]
(if (< x 5)
(recur (inc x) (conj acc x))
(conj acc 1234567890)))
(循环[x 0 acc[]
(如果(
除非递归是您真正想要的,否则某种类型的
map
或for
(列表理解)可能是一个更好的选择。可能您正在寻找的是的列表理解,或者范围
。
对于@zero323提到的循环
,您需要使用累加器。描述为is的问题看起来既奇怪又肮脏。它背后的真正问题是什么?你所说的标准输出而非打印是什么意思?你到底想做什么?我想把来自循环的值发送到另一个函数,所以我想把它们作为索引号,用于查找coll的值:(n)(这里是来自循环的数字,作为下一个coll的索引)coll
问题是,大多数对象返回nil,是否可以从循环中获取作为返回值的值?例如,您可以使用map:(conj acc{:v x})包装它
。尽管如此,整个想法还是有点可疑。你想使用循环的具体原因是什么?没有更多的细节,我只能重复我之前说过的内容-map或for可能是更好的选择。我真正想做的是(我知道这一个不起作用):(n[1 2 3 4](do(Thread/sleep 500)(for[I(range 4)]i))
因此,递归每次给我一个半秒的集合内容。预期的输出是:1234
每500毫秒一次