2013年8月28日水曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の4(超言語的抽象)、4.1(超循環評価器)、4.1.2(式の表現)、問題 4.5を解いてみる。

その他参考書籍

問題 4.5

コード(BBEdit)

sample.scm

(define (cond? exp) (tagged-list? exp 'cond))

(define (cond-clauses exp) (cdr exp))

(define (cond-=>-clause? clause)
  (eq? (cadr clause) '=>))

(define (cond-else-clause? clause)
  (eq? (cond-predicate clause) 'else))

(define (cond-predicate clause) (car clause))

(define (cond-=>-action clause)
  (list (caddr clause) (car clause)))

(define (cond-actions clause) (cdr clause))

(define (cond->if exp)
  (expand-clauses (cond-clauses exp)))

(define (expand-clauses clauses)
  (if (null? clauses)
      'false
      (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))
            (if (cond-=>-clause? first)
                (make-if (cond-predicate first)
                         (if (cond-=>-clause? first)
                             (cond-=>-action first)
                             (sequence-> exp (cond-actions first)))
                         (expand-clauses rest)))))))

こんな感じかなぁ。

0 コメント:

コメントを投稿