問題2.58 – SICP(計算機プログラムの構造と解釈)その70
2009年01月14日
問題2.58
a. 式は完全に括弧に囲まれている場合
(define (make-sum a1 a2) (list a1 '+ a2)) (define (make-product m1 m2) (list m1 '* m2)) (define (sum? x) (and (pair? x) (eq? (cadr x) '+))) (define (addend s) (car s)) (define (augend s) (caddr s)) ; 変更無し (define (product? x) (and (pair? x) (eq? (cadr x) '*))) (define (multiplier p) (car p)) (define (multiplicand p) (caddr p)) ; 変更無し (define (make-sum a1 a2) (cond ((=number? a1 0) a2) ((=number? a2 0) a1) ((and (number? a1) (number? a2)) (+ a1 a2)) (else (list a1 '+ a2)))) (define (make-product m1 m2) (cond ((or (=number? m1 0) (=number? m2 0)) 0) ((=number? m1 1) m2) ((=number? m2 1) m1) ((and (number? m1) (number? m2)) (* m1 m2)) (else (list m1 '* m2)))) (deriv '(x + (3 * (x + (y + 2)))) 'x) gosh> 4 (deriv '((x * y) * (x + 3)) 'x) gosh> ((x * y) + (y * (x + 3)))
b. 不要な括弧は除き、乗算は加算よりも前に処理する場合
パス。
参考に解答してあるサイトを紹介。
SICP memo: 問題2.58
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542