Я написал процедуру (do-test)
. Поскольку тест может иметь некоторые эффекты на переменную env
, я определила env
внутри do-test
надеясь, что env
не будет осуществляться с процедурой, поэтому каждый раз, когда я запускаю его, я буду получать свежую среду для работы. К моему удивлению, мои тестовые процедуры на самом деле несут предыдущие env
. Пожалуйста, найдите follwing код:переменная, определенная внутри процедуры, сохраняется?
(define (do-test)
(define env '(1))
;(define env (list 1))
(display env)
(if (not (equal? (car env) 1))
(error "assertion failed.")
'ok)
(set-car! env 2)
'ok)
(do-test)
(do-test)
Я пытался запустить этот код с помощью мит-схемы/лукавства/codepad.org, и все из которых сказал мне подножка (do-test)
дважды дали различные результаты.
Но если я изменю линию (define env '(1))
до (define env (list 1))
, я получу ожидаемый результат. (Вы можете найти свой код before и after изменение codepad.org)
Насколько мне известно, '(1)
и (list 1)
должны быть такими же, за исключением того, что второй будет вызов процедуры list
.
Мне интересно, почему это происходит и как я могу предотвратить повторное использование программы предыдущими значениями?