1
我的问题是...什么是更新currentRow nextRow bitPosition 的值每次(recur [currentRow nextRow bitPosition]))执行的好方法。现在我正在为这样一个事实而苦苦挣扎,即我不能在clojure中这样做简单的事情。相反,我被困在这个痛苦的世界里,我甚至无法弄清楚如何在循环中设置一个变量为一个新值。clojure循环变量赋值返回一个向量
//我希望我可以做到这一点
currentRow =(get myVector 0)
//这里我的代码
(loop [myVector []]
(let [
rule ruleParam
currentRow currentRowParam
nextRow 2r0
bitPosition 2r0
]
(when (bit-test rule (bit-and currentRow 2r111))
(
(bit-shift-right currentRow 1)
(bit-set nextRow 1)
(inc bitPosition)
))
(when (= false (bit-test rule (bit-and currentRow 2r111)))
(bit-shift-right currentRow 1)
(bit-set nextRow 1)
(inc bitPosition)
)
(recur [currentRow nextRow bitPosition]))
))
解决我的问题。感谢您的指导。
(defn firstFunc [[rule currentRowParam]]
(let [currentRowLocal (bit-shift-left currentRowParam 1) nextRowLocal 2r0 bitPositionLocal 0]
(loop [currentRow currentRowLocal nextRow nextRowLocal bitPosition bitPositionLocal]
(if (< bitPosition 31)
(if (bit-test rule (bit-and currentRow 2r111))
(recur
(bit-shift-right currentRow 1)
(bit-set nextRow bitPosition)
(inc bitPosition)
);end recur
(recur
(bit-shift-right currentRow 1)
nextRow
(inc bitPosition)
);end recur
)
;else
nextRow);end if (< bitPosition 31)
);end loop
);end let
);end defn firstFunc
(firstFunc2 [2r1110 2r11])
其中ruleParam和currentRowParam来自哪里?在循环内的let内绑定它们很愚蠢,在循环运行时它们不能被改变 – noisesmith 2014-10-19 15:24:59
没关系,我从你最后的再次调用中计算出来 – noisesmith 2014-10-19 15:29:01