Sto appena iniziando a lavorare su SICP (da solo, non è per una lezione), e ho sofferto con l'Esercizio 1.6 per un paio di giorni e non riesco a capirlo . Questo è quello in cui Alyssa ridefinisce if
in termini di cond
, in questo modo:Qual è la spiegazione dell'esercizio 1.6 in SICP?
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
Si verifica con successo in alcuni casi semplici, e quindi lo utilizza per riscrivere il programma radice quadrata (che funzionava bene con if
):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
La domanda chiede quindi: "Cosa succede quando Alyssa tenta di usare questo per calcolare radici quadrate spiegare?". [Se necessario, sono felice di riprodurre le altre procedure (good-enough?
, improve
, ecc.), Fammelo sapere.]
Ora, so cosa succede: non restituisce mai un valore, il che significa che il programma ricorre all'infinito. Non riesco proprio a spiegare perché questo accada. Qualunque sottile differenza esiste tra if
e new-if
mi sfugge. Qualsiasi aiuto è molto apprezzato.
La forma del verbo "recursive" è "recurse", quindi "ricorre". –
il titolo della tua domanda è sbagliato: ti riferisci all'esercizio 1.6, non 1.4. – systemovich
@Geoffrey Van Wyk Hai ragione. All'epoca in cui ho scritto la domanda, stavo lavorando alla mia vecchia copia della prima edizione di SICP, in cui questo problema si presenta come esercizio 1.4. Nella 2a Edizione, è l'Esercizio 1.6. Farò il resto. –