わかった。私は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!を使用することですが、私は拘束力のある形式ではないので、それは「無効な代入ターゲット」を与えます。
これがどのように機能するかについて教えてください。