[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)