好的。我一直在修补 Clojure,并且不断遇到同样的问题。让我们看一下这段代码:
(let [x 128]
(while (> x 1)
(do
(println x)
(def x (/ x 2)))))
现在我希望这会打印出一个以 128 开头的序列,如下所示:
128
64
32
16
8
4
2
相反,它是一个无限循环,一遍又一遍地打印 128。显然我预期的副作用不起作用。
那么我应该如何在这样的循环中重新定义 x 的值呢?我意识到这可能不像 Lisp(我可以使用递归的匿名函数,也许),但如果我不知道如何设置这样的变量,我会发疯的。
我的另一个猜测是使用 set!,但这给出了“无效的分配目标”,因为我不是绑定形式。
请告诉我这应该如何工作。