問題4.9 – SICP(計算機プログラムの構造と解釈)その182
2009年05月18日
問題4.9
"[jfriends:00504] SICP 読書会 第17回議事録" の do
の実装を参考にして while
を実装してみる。
(define (eval exp env) (cond ((self-evaluating? exp) exp) ; 省略 ((while? exp) (eval (while->let exp) env)) ; 省略 (else (error "Unknown expression type -- EVAL" exp)))) ;;;; while (define (while? exp) (tagged-list? exp 'while)) (define (while-predicate exp) (cadr exp)) (define (while-body exp) (cddr exp)) (define (while->let exp) (let ((predicate (while-predicate exp)) (body (while-body exp))) (list 'let 'while-loop '() (make-if predicate (append (cons 'begin body) (list (cons 'while-loop '()))) 'true))))
実行結果
;;; M-Eval input: (define i 0) ;;; M-Eval value: ok ;;; M-Eval input: (while (< i 10) (set! i (+ i 1)) (print i)) 1 2 3 4 5 6 7 8 9 10 ;;; M-Eval value: #t
問題4.10
パス
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542