3

我正在使用 mit-scheme 通过 SICP,昨天,我做了一些愚蠢的事情,我想知道是否有一种方法可以从中恢复,而无需关闭 REPL,并重新开始。如果我定义一个非工作程序,与原语同名并破坏一切,有没有办法“取消定义”它?

(define (+ a b) (...junk))

我想“取消定义”这个“+”并继续原来的那个。

4

1 回答 1

5

unbind-variable似乎可以解决问题:

1 ]=> (+ 1 2)    
;Value: 3

1 ]=> (define (+ a b) "nonsense")
;Value: +

1 ]=> (+ 1 2)
;Value 2: "nonsense"

1 ]=> (unbind-variable (the-environment) '+)
;Value: #t

1 ]=> (+ 1 2)
;Value: 3
于 2014-05-03T16:08:13.497 回答