Ich fange gerade an, SICP durchzuarbeiten (alleine; dies ist nicht für eine Klasse), und ich habe seit ein paar Tagen mit Übung 1.6 zu kämpfen, und ich kann es einfach nicht herausfinden. Dies ist derjenige, den Alyssa neu definiert if
in Bezug auf cond
:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
Sie testet es erfolgreich in einigen einfachen Fällen und verwendet es dann, um das Quadratwurzelprogramm neu zu schreiben (was gut funktioniert hat if
):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
Die Frage lautet dann: "Was passiert, wenn Alyssa versucht, damit Quadratwurzeln zu berechnen? Erklären Sie." [Falls nötig, ich bin glücklich , die anderen Verfahren zu reproduzieren ( good-enough?
, improve
usw.), lassen Sie es mich wissen.]
Jetzt weiß ich, was passiert: Es gibt niemals einen Wert zurück, was bedeutet, dass das Programm unendlich rekursiv ist. Ich kann einfach nicht erklären, warum das passiert. Was auch immer feiner Unterschied besteht zwischen if
und new-if
ist eluding ich. Jede Hilfe wird sehr geschätzt.