問題4.26 – SICP(計算機プログラムの構造と解釈)その199
2009年06月12日
問題4.26
unless
式を if
式に変換する手続き unless->if
を作り、導出された式として実装する。
ここでは4.1.7節の評価器に実装する。
(define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((unless? exp) (analyze (unless->if exp))) ;; 省略 (else (error "Unknown expression type -- ANALYZE" exp)))) (define (unless? exp) (tagged-list? exp 'unless)) (define (unless-predicate exp) (cadr exp)) (define (unless-consequent exp) (caddr exp)) (define (unless-alternative exp) (if (not (null? (cdddr exp))) (cadddr exp) #f)) (define (unless->if exp) (make-if (unless-predicate exp) (unless-alternative exp) (unless-consequent exp)))
実行結果
;;; M-Eval input: (define (factorial n) (unless (= n 1) (* n (factorial (- n 1))) 1)) ;;; M-Eval value: ok ;;; M-Eval input: (factorial 5) ;;; M-Eval value: 120
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542