計算機プログラムの構造と解釈
最近読んでるんですが、この本解答がついてない。
ググってみても、リンク切れとかでみあたらないし、
あってるか間違ってるかわからないけど、解いた分だけ毎回かいていこうと思う。
- 1.1
- 10
- 12
- 8
- 3
- 6
- なし
- なし
- 19
- #F
- 4
- 16
- 6
- 16
- 1.2
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)))
- 1.3
(define (square x) (* x x)) (define (sum-of-square x y) (+ (square x) (square y))) #目的のもの↓ (define (sum-of-bigger-num-square x y z) (cond ((and (> (+ x y) (+ x z)) (> (+ x y) (+ y z))) (sum-of-square x y)) ((and (> (+ x z) (+ x y)) (> (+ x z) (+ z y))) (sum-of-square x z)) (else (sum-of-square y z)))) ; (sum-of-bigger-num-square 1 2 3) -> 13 ; (sum-of-bigger-num-square 5 4 3) -> 41
- 1.4
(define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) ; 答え: ; 引数a,bに作用させるべき演算子をif文で分けている。 ; 演算子と関数(データ)の区別がない。どちらも同じように使える。
-
- これには少し驚いた。
- 同じようなことがjsでもできるか考えてみた。
function plus(a,b){return a+b} function minus(a,b){return a-b} function a_plus_abs_b(a,b){return ((b > 0)?plus:minus)(a,b)} // a_plus_abs_b(1,2); -> 3 // a_plus_abs_b(1,-2); -> 3
-
- 新しい関数定義はいるが、これだと同じような感じじゃないだろうか。
- 1.5
- ちょっと難しい。
- とりあえず普通にやったら無限ループに入った。
- おそらく正規順序評価だと、無限ループには入らずに終わるんだろう。
- もしかしてコレが遅延評価というやつ?