Код Ревью

Сравни свои решения

    #| This exercise has no tests.
Any solution is a right answer. |#
(define (new-if predicate then-clause else-clause)
  (cond (predicate then-clause)
        (else else-clause)))
(define (sq x) (* x x))
(define (average x y) (/ (+ x y) 2))
(define (good-enough? guess x) (< (abs (- (sq guess) x)) 0.001))
(define (improve guess x) (average guess (/ x guess)))
(define (sqrt-iter guess x)
  (new-if (good-enough? guess x) guess
          (sqrt-iter (improve guess x) x)))
(define (sqrt x) (sqrt-iter 1.0 x))
(sqrt 9)

; When Alyssa attempts to use new-if to compute 
; square roots the procedure causes infinite recursion 
; and eventually runs out of memory due to stack overflow
; since new-if isn't a special form it'll evaluate 
; else-clause everytime even if the predicate is true