SICP演習問題4.1
ついに4章に入りました.
いきなり演習問題がわからず,答えを参照した.
いつもお世話になっております.
letを使って先に評価しちゃうのか.そうかそうだな.それならどれが先かが明らかだ.
;;excercise4.1 ;;解答参照 (define val 10) (define expression (cons (set! val (+ val 2)) (set! val (* val 2)))) expression ;=> (12 . 24) ;つまりGaucheでは左から右に評価される ;;評価用 (define expression '((set! val (+ val 2)) (set! val (* val 2)))) (eval expression (interaction-environment)) ;from left to right (define no-operands? null?) (define first-operand car) (define rest-operands cdr) (define (list-of-value-from-left-to-right exps env) (if (no-operands? exps) '() (let ((first-exp (eval (first-operand exps) env))) (cons first-exp (list-of-value-from-left-to-right (rest-operands exps) env))))) ;from right to left (define (list-of-value-from-right-to-left exps env) (if (no-operands? exps) '() (let ((first-exp (list-of-value-from-right-to-left (cdr exps) env))) (cons (eval (first-operand exps) env) first-exp)))) (list-of-value-from-left-to-right expression (interaction-environment)) ;=> (12 24) (list-of-value-from-right-to-left expression (interaction-environment)) ;=> (22 20)