さかもとのブログ

つらつらと

2009-06-01から1ヶ月間の記事一覧

SICP4.3のamb評価器に関しての簡単な説明

問題4.50 分岐を左から右ではなく,ランダムに探す他はambと同じである,新しい特殊形式rambを実装せよ ここで,そもそも分岐の候補はどこで作られているかが問題になる. いままでいまいち動きがわからなかったけど,少しわかったので,自分用にメモ.簡単の…

gaucheでのエラー

現在SICPの4.3に取り組んでいる. この4.3ではamb評価器を実装して,問題を解くのだが,さっきまでどうしてもうまく動かなかった. 動かなかったプログラムは以下のもの. (define (require p) (if (not p) (amb))) (define (hoge n) (let ((a (amb 1 2 3 4)…

意義と意味

ライオンキング(劇団四季)のサントラの3番に納められている,「朝の報告」という曲に「すべての声に、意義は〜ありませ〜ん」という歌詞がある. 「すべての声」は動物たちの声を指しているのだが、「すべての声に意義はありません」とはどういった意味なの…

浅利慶太という人

時の光の中で―劇団四季主宰者の戦後史 (文春文庫)作者: 浅利慶太出版社/メーカー: 文藝春秋発売日: 2009/01/09メディア: 文庫 クリック: 2回この商品を含むブログ (1件) を見る 読んだ.浅利慶太.演出家.中曽根元総理のブレーンとしても有名.この人の人生…

SICP演習問題4.39,4.40,4.41,4.42

4.38はパス.めんどー. 4.39 影響しない(はず) 4.40 backerたちがそもそもすまないところは,始めからリストに入れない. ;exercise4.40 (define (multiple-dwelling) (let ((cooper (amb 2 3 4 5)) (miller (amb 1 2 3 4 5))) (require (not (= cooper mil…

演習問題4.35,4.36,4.37

非決定性計算に入る. 基本的には深さ優先探索を考えればいいみたい. 計算機プログラムの構造と解釈P.248より, 非決定性プログラムの長所は,探索の仕方の細部を隠すことができ,われわれのプログラムをより高い抽象レベルで表現できることである. 参考 h…

演習問4.32

carも遅延されるので,定義されていないものが,carにあっても問題ない. (cons x (* x x)) こういうのが問題なく使える. 3章のcons-streamでは,carは評価されるので, (cons-stream 1 x) はできても, (cons-stream x 1) はエラーとなる.利用方法..無限…

SICP演習問題4.30

これはおもしろい問題. しかし,問題の訳文がひどい.これは原書を読んだほうがわかりやすい.序文だけ載せる. Exercise 4.30. Cy D. Fect, a reformed C programmer, is worried that some side effects may never take place, because the lazy evaluato…

SICP演習問題4.29

時間に差が出るのは,再帰(反復的プロセス)を使うとき. 前の計算結果を使えないため,もう一度先頭から計算する. メモ化の必要性を実感した演習問題 ;with memo ;;; L-Eval input: (square (id 10)) ;;; L-Eval value: 100 ;;; L-Eval input: count ;;; L-…

SICP演習問題4.27

”演習問題”ではなく”問題”であることに気がついた. 最後まで”演習問題”で行くwさてさて,4.2に入りました.遅延評価です. ;exercise4.27 ;with Lazy ;;; L-Eval input: (define count 0) ;;; L-Eval value: ok ;;; L-Eval input: (define (id x) (set! cou…

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…

演習問題4.16

最近の演習問題は難しくてなえるw 全然進まない!今回も1時間以上掛かってしまった. なんとか読める範囲のプログラムにはなったかなぁ... 追記(20090626) バグがあったので修正した. definition?の位置がおかしかった. 評価器には入れないで,単純に式変形…

mapの実装

演習問題4.14が,mapに関する問題だった.問題の内容は Aさん,Bさんはそれぞれ超循環評価器の実験をしていた.Aさんは,mapの定義を入力し,それを使うテストプログラムをいくつか走らせたところ,うまく動いた.ところで,Bさんは,システムの組み込みのma…

SICP演習問題4.13

;;exercise4.13 ;;今見てる環境の変数のみを削除 ;;内部で使おうとして上の環境の変数も削除されては大変 (define (unbind! variable env) (let ((frame (first-frame env))) (define (scan-and-delete variables values) (cond [(null? variables) (error "…

SICP演習問題4.12

;;exercise4.12 ;;解答確認 (define (env-loop variable env emptyproc hitproc err) (define (scan variables values) (cond [(null? variables) (emptyproc env)] [(eq? variable (car variables) (hitproc values))] [else (scan (cdr variables) (cdr va…

SICP演習問題4.11

map, assoc, cut を使ってしまった.完全に反則だな. 時間があれば書き直す.でもassocは演習問題4.5の中で,もともと使っているぞ? と自分を慰める.しかもテストをしていないので,たぶん間違えがある. ;;exercise4.11 (define (make-frame variables v…

SICP演習問題4.8

なかなか苦戦した. どうやってlambdaに変換したらよいか. 変換は以下のようにする. (let loop ((a 5)) (if (< a 0) 0 (+ a (loop (- a 1))))) ;=> 15 ((lambda () (define (loop a) (if (< a 0) 0 (+ a (loop (- a 1))))) (loop 5))) ;=> 15 プログラム読み…

演習問題4.6, 4.7

評価器を作っているので,mapを使うのに少し抵抗を感じる. ;;exercise4.6 ;evalの中 ((let? exp) (eval (let->combination exp) env)) === (define (let? exp) (tagged-list? exp 'let)) (define (let-clauses exp) (cdr exp)) (define (let-bindings exp) (…

SICP演習問題4.5

一応結果も載せる. ;;exercise4.5 (define (cond-recipient? clause) (eq? (car (cond-actions clause)) '=>)) (define (test->recipient clause) (let ((predicate (cond-predicate clause)) (action (cadr (cond-actions clause)))) ;1引数の手続き (list …

SICP演習問題4.4

評価器のprimitive-proceduresにandとorを追加するのを忘れずに. ;;exercise4.4 (define (and? exp) (tagged-list? exp 'and)) (define (or? exp) (tagged-list? exp 'or)) (define (eval-and exps env) (if (null? exps) #f (let eval-and-loop ((exps (cdr…

SICP課題プログラム実行用評価器

まだ評価器が完成していないのに,課題ではそれをつかって試さなければならない. どうしようかぁと考えていた. ここはとりあえず参照させていただいて,本を進めるにつれて,自分で書き直そうということにした. 評価器参照元 http://www.serendip.ws/archive…

SICP演習問題4.3

いまいちわからなかったので,参照した. ;exercise4.3 (define (eval exp env) (cond [(self-evaluating? exp) exp] [(variable? exp) (lookup-variable-value exp env)] [else (if (get 'eval (operator exp)) ((get 'eval (operator exp)) exp env) (if (a…

SICP演習問題4.1

ついに4章に入りました. いきなり演習問題がわからず,答えを参照した. いつもお世話になっております.letを使って先に評価しちゃうのか.そうかそうだな.それならどれが先かが明らかだ. ;;excercise4.1 ;;解答参照 (define val 10) (define expression…

xor回路シュミレータ

SICPの3.3.4でディジタル回路のシュミレータを作るのだが、そういえばどうせなのでXORも作ってみようとふと思い、この節の復習も兼ねて作ってみた。といっても簡単だけど。 (define (xor-gate a1 a2 output) (define (xor-action-procedure) (let [(new-valu…