問題4.1 – SICP(計算機プログラムの構造と解釈)その173
2009年05月08日
問題4.1
まず、gauche でそれぞれの評価順の場合の手続きを作って確かめてみる。
(define val 10) (define expression '((set! val (+ val 2)) (set! val (* val 2))))
左から右に評価する場合
(define (list-of-values-left-to-right exps) (if (null? exps) '() (let ((first-eval (eval (car exps) (interaction-environment)))) (cons first-eval (list-of-values-left-to-right (cdr exps)))))) (list-of-values-left-to-right expression) gosh> (12 24)
右から左に評価する場合
(define (list-of-values-right-to-left exps) (if (null? exps) '() (let ((first-eval (list-of-values-right-to-left (cdr exps)))) (cons (eval (car exps) (interaction-environment)) first-eval)))) (list-of-values-right-to-left expression) gosh> (22 20)
上手く動いたようなので、これをもとにして問題の list-of-values
を作る。
;; 被演算子を左から右へ評価する list-of-values (define (list-of-values exps env) (if (no-operands? exps) '() (let ((first-eval (eval (first-operand exps) env))) (cons first-eval (list-of-values (rest-operands exps) env))))) ;; 被演算子を右から左へ評価する list-of-values (define (list-of-values exps env) (if (no-operands? exps) '() (let ((first-eval (list-of-values (rest-operands exps) env))) (cons (eval (first-operand exps) env) first-eval))))
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542