SICP 問題 4.05
make-ifに渡す前にclauseをpredicateとactionにわかる. (car action)に'=>があれば(cadr action)にpredicateを適用する.
(define (expand-clauses clauses) (if (null? clauses) 'false ;; else 説は無い (let ((first (car clauses)) (rest (cdr clauses))) (if (cond-else-clause? first) (if (null? rest) (sequence->exp (cond-actions first)) (error "ELSE clause isn't last: COND->IF" clauses)) (let ((predicate (cond-predicate first)) (action (cond-action first))) (make-if (cond-predicate first) (if (eq? (car action) '=>) ((cadr action) predicate) (sequence->exp action)) (expand-clauses rest)))))))