Par exemple, jetez un oeil à ce code (de tspl4):Pourquoi toutes les procédures doivent-elles être définies avant que le compilateur ne les voit?
(define proc1
(lambda (x y)
(proc2 y x)))
Si je lance mon programme ce que dans le schéma ...
#!r6rs
(import (rnrs))
(define proc1
(lambda (x y)
(proc2 y x)))
Je reçois cette erreur:
expand: unbound identifier in module in: proc2
... Ce code fonctionne bien si:
#!r6rs
(import (rnrs))
(define proc2
+)
(define proc1
(lambda (x y)
(proc2 y x)))
(display (proc1 2 3)) ;output: 5
Si c'est une erreur d'exécution, alors pourquoi mon premier programme tombe-t-il en panne? Il ne fonctionne même pas proc1, alors pourquoi aurait-il besoin de proc2? tspl4 dit qu'il ne devrait pas tomber en panne. – Cam
Pensez-y comme un problème de liaison: PLT compile réellement votre code, et vous avez une référence que le compilateur ne connaît pas. –