Le compte est bon
Un utilisateur du programme donné dans cet article m’a dit :
« Le programme interprété et le programme compilé n’ont pas le même comportement : pour le premier je dois donner la liste de nombres sous la forme quottée :
'(2 4 7 11 20)
alors qu’au programme compilé je dois donner la liste non quottée :
(2 4 7 11 20)
»
Cette observation ne tient pas compte de la différence de contexte : si dans la « boucle lire-évaluer-imprimer » (boucle read-eval-print) de l’interprète j’appelle directement la procédure compte-bon
je dois effectivement taper :
(compte-bon 14 '(2 4 7 11 20))
en quottant la liste pour que l’interprète ne tente pas de l’évaluer, ce qui provoquerait une erreur (laquelle ?).
Mais si, dans la boucle read-eval-print de l’interprète, comme d’ailleurs en réponse au programme compilé, je passe par la procédure entre
, je dois donner la liste en réponse à un appel à la procédure (read)
, et là je ne devrai pas la quotter parce qu’elle ne sera pas évaluée.
Pourquoi cette liste n’a-t-elle pas été évaluée ? Parce qu’elle n’a pas été soumise au système par l’intermédiaire de la « boucle lire-évaluer-imprimer », mais renvoyée comme résultat de l’évaluation d’une expression.
Et, heureusement d’ailleurs, l’évaluateur ne « boucle » pas indéfiniment pour évaluer tous les résultats qu’il produit.