[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends:00033] 第 27 回議事録
えんどうです。
例によって不完全ながら議事録を投稿します。
不足部分を補足おねがいします>各位
;;2002-12-07
;;和田先生、小林さん、野中さん、金山さん、山口さん、山下さん、えんどう
;;p.323
;;問題 5.22
;a
(define append-machine
(make-machine
'(continue x y var)
(list (list 'null? null?) (list 'car car) (list 'cdr cdr)
(list 'cons cons)
'((assing continue (label done))
append
(test (op null?) (reg x))
(branch (label null))
(save x)
(assign x (op cdr) (reg
;;;;;
(assign x (op car) (reg x))
(assign val (op cons) (reg x) (reg y))
(restore continue)
(goto (reg continue))
null
(assign val (geg y))
(goto (reg continue))
done)))
;b
(define append!-machine
(make-machine
'(x y z)
(list (list 'null? null?) (list 'cdr cdr) (list 'set-cdr! set-cdr!))
'((save x)
loop
(assign z (op cdr) (reg x))
(test (op null?) (reg z))
(branch (label null))
(assign x (op cdr) (reg x))
(goto (label loop))
null
(perform (op set-cdr!) (reg x) (reg y))
(restore x))))
;; 山下さん
(define (append x y)
(if (null? x)
y
(cons (car x)
(append (cdr x) y))))
(define (append! x y)
(if (null? x)
(set! x y)
(append-itr! x y))
x)
(degine (append-itr! x y)
(if (null? (cdr x))
(set-cdr! x y)
(append-itr! (cdr x) y)))
;; 5.3.2 無限メモリー幻想の維持
;; p.324
;; ストップアンドコピーごみ集めの実装
;; p.325 4行め 「操作」→「走査」(原文 scan)
;; 5行め 「freeポイント」→「freeポインタ」
;; 和田先生による予習資料↓の説明
;; http://www.sampou.org/scheme/sicp/mailingList/msg00246.html
;; 和田研究室ではストップアンドコピーGCを「式年遷宮」と呼んでいた
;; スットプアンドコピーCGは仮想メモリーで特にうまく動作する(和田先生)
;; リアルタイムCGは、新しいものはすぐ不要になりやすい、という発想で動く。
;; 古いものは「殿堂入りした」などと表現することも。
;; p.327
;; 5.4 積極制御評価器
;; p.328
;; レジスタと演算
;; 5.4.1 積極制御評価器の中核
;; 単純式の評価
;; p.329
;; 手続き作用の評価
;; p.330
;; empty-arglistはなぜ関数なのか?(和田先生)
;; p.331
;; 手続き作用
;; 引数を左から評価するとき、appendを使うと常に頭から走査してしまう。
;; これだとコストがかかるので、consしてreverseするやり方もある(和田先生)
;; 5.4.2 並びの評価と末尾再帰
;; p.332
;; 引数なしの (begin) は書けない(和田先生)
;; 末尾再帰
;; p.333
;; 末尾再帰版のev-sequenceでは本体を持たない(begin)が書ける
(define (count n)
(newline)
(display n)
(count (+ n 1)))
;; これを実行するとスタックオーバーフローが起きてしまう実装はダメ
;; 5.4.3 条件式、代入および定義
;; p.334
;; p.335
;; 問題 5.23
(cond (p0 e00 e01 e02)
(p1 e10 e11 e12)
:
(pn en0 en1 ...)
else
↓
(if p0
(begin e00 e01 e02)
(if p1
(begin e10 ...
(if ...
;; 問題 5.24
;; 宿題
;; 問題 5.25
;; 実引数を評価する前に、その頭すべてに eval を付けておく
(foo (+ 1 2) (* 3 4))
~~~~~ ~~~~~~~
3 12
(define (foo x y)
(+ (* x x) (* y y))
~~~~~~~~~~~~~~~~~~~
x (eval (+ 1 2))
y (eval (* 3 4))
;; 宿題
;; 5.4.4 評価の実行
;; 註 29 の式がおかしい? → 原書もこの通り
;; p.336
;; p.337
;; 評価器の性能監視
;; 12行め 「評価器とに」→「評価器との」
;; 問題 5.26
;; a.
;; b.
;; 29 + 35n
;; 問題 5.27
;; p.338
;; 問題 5.28
;; eval-sequence → ev-sequence では? (原文も誤り)
;; 宿題
;; 問題 5.29
;; a.
;;
;;; EC-Eval input:
(fib 2)
(total-pushes = 72 maximum-depth = 13)
;;; EC-Eval value:
1
;;; EC-Eval input:
(fib 3)
(total-pushes = 128 maximum-depth = 18)
;;; EC-Eval value:
2
;;; EC-Eval input:
(fib 4)
(total-pushes = 240 maximum-depth = 23)
;;; EC-Eval value:
3
;;; EC-Eval input:
(fib 5)
(total-pushes = 408 maximum-depth = 28)
;;; EC-Eval value:
5
;;; EC-Eval input:
(fib 6)
(total-pushes = 688 maximum-depth = 33)
;;; EC-Eval value:
8
;; a = 56
;; b = -40
;; Sn = Sn-1 + Sn-2 + 40
;; 問題 5.30
;; 宿題...
;; p.339
;; 5.5 翻訳系
;; 翻訳系の概観
;; p.340
;; 5.5.1 翻訳系の構造
;; p.341
;; 標的と接続
;; 命令列とスタックの使用
;; p.342
;; 問題 5.31
;; p.343
;; 問題 5.32
;; 次回は p.343 5.5.2 式の翻訳 から
--
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)