我写了这个"代码"显示问题,因为实际代码非常大
(defn add-list
([number]
(def used [number])
(add-list number used))
([number used]
;Add elements to used
;Process the elements in used
;Find the next number
(add-list number used)
))
我需要有一个我可以在fn中访问的向量,它允许我处理向量中的项目,然后将输出添加到向量中,以便旧项目和新项目在此向量中下一个周期。
我通过在add-list函数上面定义向量来实现它,但如果我第二次在repl上运行该程序,则向量不会被清除。它还说有时向量是未绑定的。
答案 0 :(得分:1)
reduce
函数可用于累积结果列表,而不仅仅是总和值:
(defn accum-reverse
[cum-state curr-val]
(cons curr-val cum-state))
(println
(reduce accum-reverse
[] ; initial value of cum-state
[1 2 3 4 5] ; fed into curr-val one at a time
))
;=> (5 4 3 2 1)
函数accum-reverse
被调用5次。第一次cum-state
是[]
的初始值,即空向量。随后的每个时间cum-state
都会设置为accum-reverse
的上一个返回值。
除了在线文档,您还可以从Clojure for the Brave & True获得一些好的信息。其中大部分是在线的,但也值得购买。