問題解答
問2.57
(define (augend s) (if (null? (cdddr s)) (caddr s) (cons '+ (cddr s)))) (define (multiplicand p) (if (null? (cdddr p)) (caddr p) (cons '* (cddr p))))
問 2.58
a:以下のような感じで構成子や選択子を定義していく
(define v (list 1 '+ 2)) (define (addend s) (car s)) (define (augend s) (caddr s)) (define (sum? x) (and (pair? x) (eq? (cadr x) '+)))
b:そのまま解くのは大変そう?一度前置記法に変換する処理を入れるのがいいかも。
→答えを見るとその通りっぽい。コンパイラを書いていた。
本文
2.3.3 例:集合の表現
集合の定義・演算について議論。