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

問題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))))))

実行結果

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