weima learns to program

my attempt to do the exercises in sicp.

Saturday, July 5, 2008

sicp exercise 1.6

;  Exercise 1.6.  Alyssa P. Hacker doesn't see why if needs to be provided as a special form. ``Why can't I
;  just define it as an ordinary procedure in terms of cond?'' she asks. Alyssa's friend Eva Lu Ator claims
;  this can indeed be done, and she defines a new version of if:
;
;  (define (new-if predicate then-clause else-clause)
;    (cond (predicate then-clause)
;          (else else-clause)))
;
;  Eva demonstrates the program for Alyssa:
;
;  (new-if (= 2 3) 0 5)
;  5
;
;  (new-if (= 1 1) 0 5)
;  0
;
;  Delighted, Alyssa uses new-if to rewrite the square-root program:
;
;  (define (sqrt-iter guess x)
;    (new-if (good-enough? guess x)
;            guess
;            (sqrt-iter (improve guess x)
;                       x)))
;
;  What happens when Alyssa attempts to use this to compute square roots? Explain.

; since the new-if is a procedure, the if-clause and then-clause are evaluated at the time of procedure call
; so the sqrt-iter will be called infinite times in applicative order evaluation.