J'ai reçu un résultat inattendu lors de la redéfinition de l'opérateur +
dans un schéma en utilisant guile
. Je dois souligner que cela s'est produit en expérimentant pour essayer de comprendre la langue; il n'y a pas de tentative ici pour écrire un programme utile.Schéma: pourquoi ce résultat lors de la redéfinition d'un opérateur prédéfini?
Voici le code:
(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"
En guile
la fonction show
utilise la définition prédéfinie de +
même après que je l'ai redéfini, bien qu'il utilise la nouvelle définition de f
. Je dois redéfinir show
pour qu'il reconnaisse la nouvelle définition de +
. Dans mit-scheme
les deux nouvelles définitions sont reconnues immédiatement, ce qui était ce que je m'attendais à se produire. En outre, les autres définitions de +
sont instantanément reconnues par les deux interprètes sans avoir à redéfinir show
.
Que se passe-t-il derrière les coulisses en guile
pour que les références à ces opérateurs redéfinies soient différemment?
Et pourquoi la différence entre les deux interprètes?
Intéressant. +1 pour une question très clairement expliquée. –