問題2.57 – SICP(計算機プログラムの構造と解釈)その69

問題2.57

和の表現の改良

; 元の被加数
(define (augend s) (caddr s))
; 任意個の項の和を扱えるようにした被加数
(define (augend s)
  (if (null? (cdddr s))
      (caddr s)
      (cons '+ (cddr s))))

積の表現の改良

; 元の被乗数
(define (multiplicand p) (caddr p))
; 任意個の項の積を扱えるようにした被乗数
(define (multiplicand p)
  (if (null? (cdddr p))
      (caddr p)
      (cons '* (cddr p))))

実行結果

(deriv '(* x y (+ x 3)) 'x)
gosh> (+ (* x y) (* y (+ x 3)))

うーん、難しい…、make-summake-product に手を加えようと試行錯誤していた…
プログラムを拡張して任意個の項の和と積が扱えるようにするには、deriv 手続きはおろか make-sum, make-product 手続きにも"手を加える必要がない"ように抽象化の壁がたてられているということが解ればよしとするか。

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»