Ho ricevuto un risultato imprevisto durante la ridefinizione dell'operatore +
in un programma di schema utilizzando guile
. Vorrei sottolineare che ciò è avvenuto mentre sperimentavo per cercare di capire la lingua; non c'è alcun tentativo qui per scrivere un programma utile.Schema: perché questo risultato quando si ridefinisce un operatore predefinito?
Ecco il codice:
(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"
Nel guile
la funzione show
utilizza la definizione predefinita di +
anche dopo che ho ridefinito, anche se si utilizza la nuova definizione di f
. Devo ridefinire lo show
per far sì che riconosca la nuova definizione di +
. In mit-scheme
entrambe le nuove definizioni vengono riconosciute immediatamente, che è quello che mi aspettavo che accadesse. Inoltre, qualsiasi ulteriore definizione di +
viene immediatamente riconosciuta da entrambi gli interpreti senza dover ridefinire lo show
.
Cosa succede dietro le quinte di guile
per rendere in modo diverso i riferimenti a questi operatori ridefiniti?
E perché la differenza tra i due interpreti?
Interessante. +1 per una domanda spiegata molto chiaramente. –