問題4.5 – SICP(計算機プログラムの構造と解釈)その178
2009年05月14日
問題4.5
cond
節(clause)の各式(expression)の car
に =>
が含まれる場合とそうでない場合とに分けて処理する。
(define (expand-clauses clauses) (if (null? clauses) #f (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)) (make-if (cond-predicate first) (let ((action (cond-actions first)) (predicate (cond-predicate first))) (if (eq? (car action) '=>) (list (cadr action) predicate) (sequence->exp action))) (expand-clauses rest))))))
実行結果
assoc
を primitive-procedures
に追加しておく。
;;; M-Eval input: (define (cadr x) (car (cdr x))) ;;; M-Eval value: ok ;;; M-Eval input: (cond ((assoc 'b '((a 1) (b 2))) => cadr) (else false)) ;;; M-Eval value: 2 ;;; M-Eval input:
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542