問題4.54 – SICP(計算機プログラムの構造と解釈)その226
2009年07月26日
問題4.54
pred-value
が false
の場合に失敗継続を呼び出す。
(define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((require? exp) (analyze-require exp)) ;; 省略 (else (error "Unknown expression type -- ANALYZE" exp)))) (define (require? exp) (tagged-list? exp 'require)) (define (require-predicate exp) (cadr exp)) (define (analyze-require exp) (let ((pproc (analyze (require-predicate exp)))) (lambda (env succeed fail) (pproc env (lambda (pred-value fail2) (if (false? pred-value) (fail2) (succeed 'ok fail2))) fail))))
実行結果
;;; Amb-Eval input: (define (an-element-of items) (require (not (null? items))) (amb (car items) (an-element-of (cdr items)))) ;;; Starting a new problem ;;; Amb-Eval value: ok ;;; Amb-Eval input: (an-element-of '(1 2 3)) ;;; Starting a new problem ;;; Amb-Eval value: 1 ;;; Amb-Eval input: try-again ;;; Amb-Eval value: 2 ;;; Amb-Eval input: try-again ;;; Amb-Eval value: 3 ;;; Amb-Eval input: try-again ;;; There are no more values of (an-element-of '(1 2 3))
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542