我尝试使用guile
重新定义scheme程序中的+
运算符时,结果出乎意料。需要指出的是,这是在尝试理解语言的过程中发生的;这里并没有尝试编写一个有用的程序。
以下是代码:
(define (f a b) 4)
(define (show)
(display (+ 2 2)) (display ",") (display (f 2 2)) (newline))
(show)
; guile & mit-scheme: "4,4"
(define (+ a b) 5)
(define (f a b) 5)
(show)
; mit-scheme: "5,5"
; guile: "4,5" - this "4" is the unexpected result
(define (show)
(display (+ 2 2)) (display ",") (display (f 2 2)) (newline))
(show)
; guile & mit-scheme: "5,5"
在guile中,即使我重新定义了它,函数show仍使用+的预定义定义,但它使用+的新定义。我必须重新定义show才能让它识别+的新定义。在mit-scheme中,两个新定义都会立即被识别,这正是我期望发生的。此外,任何进一步的+定义都会被这两个解释器立即识别,而不需要重新定义show。Guile和MIT Scheme背后发生了什么,使其以不同的方式绑定对这些重新定义的运算符的引用?
为什么这两个解释器之间会有差异?