Otrzymałem nieoczekiwany wynik podczas redefiniowania operatora +
w programie schematu, używając guile
. Powinienem zaznaczyć, że miało to miejsce podczas eksperymentowania, aby spróbować zrozumieć język; nie ma tutaj próby napisania przydatnego programu.Schemat: dlaczego ten wynik przy redefiniowaniu predefiniowanego operatora?
Oto kod:
(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"
W guile
funkcja show
używa predefiniowanego definicję +
nawet po ja przedefiniowana go, choć wykorzystuje nową definicję f
. Muszę przedefiniować show
, aby uzyskać rozpoznanie nowej definicji +
. W mit-scheme
obie nowe definicje są rozpoznawane natychmiast, co jest tym, czego oczekiwałem. Ponadto, wszystkie dalsze definicje +
są natychmiast rozpoznawane przez obu tłumaczy bez konieczności ponownego definiowania show
.
Co dzieje się za kulisami w guile
, aby powiązać je z tymi zdefiniowanymi na nowo operatorami inaczej?
I dlaczego różnica między dwoma tłumaczami?
Interesujące. +1 dla bardzo jasno wyjaśnionego pytania. –