Обычно я избегаю использования мутаций, поскольку они редко нужны.
Однако они мне нужны, и я пытаюсь кое-что понять. Есть специфическое поведение, которое меня заинтриговало, и я хотел бы попросить вашей помощи, чтобы лучше понять его.
Если я наберу REPL, все изменения будут работать:
> (define x 1)
> (set! x (+ x 1))
> x
2
Если я помещу назначение и мутацию в окно определения, это также сработает:
(define y 1)
y
(set! y (+ y 1))
y
После запуска файла я вижу в REPL следующий правильный результат:
1
2
>
Однако, если я помещу определение переменной x
в окна определения и попытаюсь установить! его на новое значение в REPL я получаю сообщение об ошибке:
; Definition Window
(define y 1)
;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;
; REPL
> (set! y (+ y 1))
. . y: cannot modify a constant
Почему это происходит? Не следует ли использовать интерактивное программирование специально для подобных ситуаций?
Заранее спасибо.