Was ist die Erklärung für die Übung 1.6 in SICP?

Bin ich mit der Arbeit gerade erst durch SICP (auf meinen eigenen; dies ist nicht für eine Klasse), und ich habe gekämpft, mit Übung 1.6 seit ein paar Tagen und ich kann einfach nicht scheinen, um es herauszufinden. Das ist das einzige, wo Alyssa re-definiert if im Hinblick auf cond etwa so:

(define (new-if predicate then-clause else-clause)
    (cond (predicate then-clause)
          (else else-clause))

Sie tests, die Sie erfolgreich auf einige einfache Fälle, und setzt es dann neu zu schreiben das square-root-Programm (das funktioniert nur mit if):

(define (sqrt-iter guess x)
    (new-if (good-enough? guess x)
            guess
            (sqrt-iter (improve guess x)
                       x)))

Dann die Frage stellt: "Was passiert, wenn Alyssa versucht Sie diese zu berechnen Quadrat-Wurzeln? Erklären." [Wenn nötig, ich bin glücklich, zu reproduzieren, die anderen Verfahren ( good-enough? , improve usw.), lass es mich wissen.]

Nun, ich weiß, was passiert: es nie einen Wert zurückgibt, was bedeutet, dass das Programm eine Rekursion unendlich. Ich kann mir einfach nicht erklären, warum dies geschieht. Was auch immer feine Unterschied besteht zwischen if und new-if ist entzieht sich mir. Jegliche Hilfe sehr geschätzt.

InformationsquelleAutor Alex Basson | 2009-07-23
Schreibe einen Kommentar