我写了一个程序(do-test)。由于测试可能对变量有一些影响env,我env在里面定义do-test了希望env程序不会携带它,所以每次运行它,我都会得到一个新的环境来工作。令我惊讶的是,我的测试程序居然携带了以前的env. 请找到以下代码:
(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)
我尝试使用 mit-scheme / guile / codepad.org 运行此代码,所有这些都告诉我运行(do-test)两次会产生不同的结果。
但是,如果我将行更改(define env '(1))为(define env (list 1)),我会得到预期的结果。(您可以在 codepad.org 中找到更改前后的代码)
据我所知,'(1)应该(list 1)是相同的,除了第二个将调用过程list。
我想知道为什么会发生这种情况以及如何防止程序重用以前的值?