當使用guile
在方案程序中重新定義+
運營商時,我收到了意外的結果。我應該指出,這是在嘗試瞭解語言的過程中發生的;這裏沒有嘗試寫一個有用的程序。方案:爲什麼這個結果重新定義預定義的操作符?
下面的代碼:
(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
使用的+
的預定義的定義我已經重新定義它甚至以後,儘管它使用的f
的新定義。我必須重新定義show
才能識別+
的新定義。在mit-scheme
這兩個新的定義立即被識別,這是我期待的事情發生。此外,+
的任何進一步定義都可以立即被兩位口譯人員認可,而無需重新定義show
。
guile
後臺發生了什麼事情,以便使它對這些重新定義的運算符的引用有不同的綁定?
爲什麼兩位口譯員之間的區別?
有趣。 +1爲非常清楚解釋的問題。 – 2010-08-17 20:29:16