Je suis juste de commencer à travailler à travers SICP (sur mon propre; ce n'est pas pour une classe), et j'ai eu du mal avec l'Exercice de 1,6 pour un couple de jours et je n'arrive pas à le comprendre. C'est le seul où Alyssa re-définit if
en termes de cond
, comme suit:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
Elle le teste avec succès sur certains cas simples, puis de les utiliser pour la ré-écriture de la racine carrée du programme (ce qui a très bien fonctionné avec if
):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
La question alors se pose: "Ce qui se passe quand Alyssa tente de l'utiliser pour calculer des racines carrées? Expliquer." [Si nécessaire, je suis heureux de reproduire les autres procédures (good-enough?
, improve
, etc.), laissez-moi savoir.]
Maintenant, je sais ce qui se passe: il ne renvoie jamais de valeur, ce qui signifie que le programme se répète à l'infini. Je ne peux pas expliquer pourquoi cela se produit. Quelle que soit la subtile différence qui existe entre if
et new-if
est faussé compagnie à moi. Toute aide appréciée.