問題1.2〜問題1.5 – SICP(計算機プログラムの構造と解釈)その1

以前読みかけて挫折していた SICP にもう1度挑戦するために今度は blog でメモを取りながら続けてみる。

問題1.2

(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
   (* 3 (- 6 2) (- 2 7)))
;=> -37/150

問題1.3

(define (square a) (* a a))
(define (sum-of-squares a b) (+ (square a) (square b)))
(define (sum-of-squares-biggers a b c)
  (if (> a b)
      (if (> b c)
          (sum-of-squares a b)
          (sum-of-squares a c))
      (if (> a c)
          (sum-of-squares a b)
          (sum-of-squares b c))))

sum-of-squares が4ヶ所も出てきてしまっているので改良

(define (sum-of-squares-biggers a b c)
  (if (> a b)
      (sum-of-squares a (if (> b c) b c))
      (sum-of-squares b (if (> a c) a c))))

問題1.4

b > 0 の場合 (+ a b) を評価する。
b <= 0 の場合 (- a b) を評価する

問題1.5

作用的順序
評価をしながら展開していく

(test 0 (p)) ;=>第1引数0を評価 0
(test 0 (p)) ;=>第2引数(p)を評価(p)
;=>無限ループになる

正規順序
すべて展開してから評価

(test 0 (p))
(if (= 0 0) 0 (p))
0
;=>(p)は評価されない。
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»