【发布时间】:2013-12-13 10:09:16
【问题描述】:
我是 clojure 的新手,我想创建一个函数,它返回某个数字的所有除数的向量。
例如:
[1 2 3] 为 6 作为输入
(defn div [x seq]
(let [r (range 1 (+ (/ x 2) 1)) ]
(dotimes [i (count (range 1 (+ (/ x 2) 1) ))]
(cond
(= (mod x (nth r i )) 0)(print (conj seq (nth r i )))
))))
此函数以下列格式返回输出:
[1][2][4][5][10][20][25][50] 为 100,但我想在一个向量中获得输出。似乎 seq 变量不断被每个循环步骤覆盖。谁能解释这种行为并为我提供解决方法?
提前致谢并致以最诚挚的问候
【问题讨论】:
-
seq并不是每一步都被“覆盖”。就是你永远不会保存(conj seq (nth r i))的返回值。您认为conj应该“就地”更改seq,但这不是Clojure 数据结构的工作方式。当您使用“修改”数据结构的函数时,该函数将返回“新”数据结构,而“旧”数据结构将保持不变。
标签: function clojure functional-programming