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