В ПОРЯДКЕ. Я возился с Clojure и постоянно сталкивался с одной и той же проблемой. Возьмем этот небольшой фрагмент кода:
(let [x 128]
(while (> x 1)
(do
(println x)
(def x (/ x 2)))))
Теперь я ожидаю, что это распечатает последовательность, начинающуюся со 128, так:
128
64
32
16
8
4
2
Вместо этого это бесконечный цикл, печатающий 128 снова и снова. Очевидно, мой предполагаемый побочный эффект не работает.
Итак, как мне переопределить значение x в таком цикле? Я понимаю, что это может быть не похоже на Лисп (возможно, я мог бы использовать анонимную функцию, которая рекурсивно обращается к самой себе), но если я не пойму, как установить такую переменную, я сойду с ума.
Мое другое предположение состояло бы в том, чтобы использовать set!, но это дает «Неверная цель назначения», так как я не в форме привязки.
Пожалуйста, просветите меня, как это должно работать.