Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)を読む、その2です。今回は

  • compound procedure(例えば (define (square a) (* a a))しておいてから、(define (sum-of-square a b) (+ (square a) (square b)))と書いた時の「(define (sum-of-square a b) (+ (square a) (square b)))」のこと)
    • substitution model (インタープリタ内部でどのようにcompound proedureを評価するのか。暫定的な説明として、「手続きを置き換え(substitute)てprimitiveな手続きのみの組み合わせに変換する」というモデルが導入される。でも、これは後で破綻するよ!って書いてあった)
      • Applicative order(インタープリタが行っている方法。引数を先に評価してから、operandを適用する)
      • normal order(まずはoperandをどんどんprimitiveな手続きに変換する)

というようなことが書いてありました(私の理解が間違えていなければ…)。

Excercise (pp 20-21)

Excercise 1.2

Translate the following expression into prefix form

¥frac{5 + 4 + (2 - (3 - (6 + ¥frac{4}{5})))}{3(6 - 2)(2 - 7)}

(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)))
Excercise 1.3

Define a procedure that takes 3 numbers as arguments and returns the sum of the squares of the two larger numbers.

(define (sum-of-square a b c)
(define (square n)
(* n n))
(cond [(and (< a b) (< a c)) (+ (square b) (square c))]   ; when a is the smallest
[(and (< b a) (< b c)) (+ (square a) (square c))]   ; when b is the smallest
[(and (< c a) (< c b)) (+ (square a) (square b))])) ; when c is the smallest