Recibí un resultado inesperado al redefinir el operador +
en un programa de esquema que usa guile
. Debo señalar que esto ocurrió al experimentar para intentar comprender el lenguaje; aquí no hay ningún intento de escribir un programa útil.Esquema: ¿por qué este resultado al redefinir un operador predefinido?
Aquí está el código:
(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 función show
utiliza la definición predefinida de +
incluso después de haber redefinido, aunque utiliza la nueva definición de f
. Tengo que redefinir show
para que reconozca la nueva definición de +
. En mit-scheme
ambas nuevas definiciones se reconocen inmediatamente, que es lo que esperaba que sucediera. Además, cualquier otra definición de +
es reconocida instantáneamente por ambos intérpretes sin tener que redefinir show
.
¿Qué está sucediendo detrás de las escenas en guile
para hacer que enlace las referencias a estos operadores redefinidos de manera diferente?
¿Y por qué la diferencia entre los dos intérpretes?
Interesante. +1 para una pregunta muy claramente explicada. –