なぜ「if」が特殊形式なのか。「new-if」関数を定義して確かめてみるという問題。 実際やってみたけど、ピンとこなかった。(ちゃんとifの動作を思い出してればわかったはず)
;;not special syntax. new-if procidure. (define new-if (lambda (predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause)))) (new-if (= 2 3) 0 5);;=> 5 (new-if (= 1 1) 0 5);;=> 0 |
(define square (lambda (x) (* x x))) (define avarage (lambda (x y) (/ (+ x y) 2))) ;; "if" replaced "new-if" (define sqrt (lambda (x) (define improve (lambda (guess) (avarage guess (/ x guess)))) (define good-enough? (lambda (guess) (< (abs (- (square guess) x)) 0.001))) (define sqrt-iter (lambda (guess) (new-if (good-enough? guess) guess (sqrt-iter (improve guess))))) (sqrt-iter 1.0))) (sqrt 9);;=> 3.00009155413138 |
0 件のコメント:
コメントを投稿