さかもとのブログ

つらつらと

2009-06-26から1日間の記事一覧

SICP演習問題4.21

今回は簡単だった. しかし,こんな考え方もあるのかーと思ってしまった. ;;a ((lambda (n) ((lambda (fact) (fact fact n)) (lambda (ft k) (if (= k 1) 1 (* k (ft ft (- k 1))))))) 10) ((lambda (n) ((lambda (fibonacci) (fibonacci fibonacci n)) (la…

演習問題4.20

a 式の変換は以下のようにする. (letrec ((fact (lambda (n) (if (= n 1) 1 (* n (fact (- n 1))))))) (fact 10)) (let ((fact '*unassigned)) (set! fact (lambda (n) (if (= n 1) 1 (* n (fact (- n 1)))))) (fact 10)) これを実現するために, (define (…

演習問題4.19

Ben:逐次規則版 もともとの内部定義を掃き出さない評価器を使えばいい ;;; M-Eval input: (let ((a 1)) (define (f x) (define b (+ a x)) (define a 5) (+ a b)) (f 10)) ;;; M-Eval value: 16 Alyssa ;;; M-Eval input: (let ((a 1)) (define (f x) (defin…

演習問題4.18

変換前 (define (solve f y0 dt) (define y (integral (delay dy) y0 dt)) (define dy (stream-map f y)) y) 変換後 (define (solve f y0 dt) (let ((y '*unassigned*) (dt '*unassigned)) (let ((a (integral (delay dy) y0 dt)) (b (stream-map f y))) (se…

ミスった!

s/evaluater/evaluator/

SICP演習問題4.17

とりあえず張る. (define (hoge1 x) (define a 1) (+ x a)) 変換する場合 ;;; M-Eval input: #?="./evaluater.scm":348:(car body) #?- (define a 1) #?=body #?- ((let ((a '*unassigned)) (set! a 1) (+ x a))) ;;; M-Eval value: ok ;;; M-Eval input: #…

SICP演習問題4.22

やっと4.1の終わりが見えてきた. analyze付きがなかなか実行できずはまった. 原因はscan-ouf-defines用にmake-procedureを変えていたのを忘れていて,そのままanalyze付きの評価器を実行しようとしたため.今日はもうお終い. 解答は [(let? exp) (analyze…