SICPを読む(4) 問題1.2 - 1.5
問題1.2
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7))) ; -37/150
4/5でもOK。
問題1.3
(define (square-3 x y z) (if (> x y) (sum-of-squares x (if (> y z) y z)) (sum-of-squares y (if (> z x) z x)))) (square-3 2 3 2)
アンサーブックを見たら問題を読み間違えてたので、修正。
問題1.4
(define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) (a-plus-abs-b 1 -2) ; 3
面白い。振舞いをを変更出来てしまう。
問題1.5
(define (p) (p)) (define (test x y) (if (= x y) 0 y)) (test 0 (p))
Schemeは作用的順序なので、無限ループ。
(test 0 (p)) ; ->0を評価->(test 0 (p)) ; ->pを評価->(test 0 (p)) ; ->pを評価->(test 0 (p))...
つまり、"引数の中"を先に評価する。括弧の中ではないらしい。