[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00010] 第 26 回議事録



えんどうです。

当日うっかり書記を決めていなかった気がします。
(不文律ではプロジェクターで投影した人、となってはいますが..)

私のメモをいちおう投稿いたします。
不完全な部分は補足おねがいします>各位

;; 2002-11-09 10:00am〜16:00
;; タイムインターメディア会議室
;; 小林さん、山下さん、田原さん、和田先生、えんどう

;; p.305

;; ex.5.4
;; a.

(controller
 (assign continue (label expt-done))
 expt-loop
  (test (op =) (reg n) (const 0))
  (branch (label base-case))
  (save continue)
  (assign n (op -) (reg n) (const 1))
  (assign continue )
  (goto (label expt-loop))
 after-expt
  (restore continue)
  (assign val (op *) (reg b) (reg val))
  (goto (reg continue))
 base-case
  (assign val (const 1))
  (goto (reg continue))
 expt-done)

;; b.

(controller
 (assign counter (reg n))
 (assign product (const 1))
 expt-iter
  (test (op =) (reg counter) (const 0))
  (branch (label expt-done))
  (assign counter (op -) (reg counter) (const 1))
  (assign product (op *) (reg b) (reg product))
  (goto (label expt-iter))
 expt-done)

;; 絵は省略

;; ex. 5.5

;; べき乗をやったので省略

;; p.306

;; 問題 5.6

;; 5.1.5 命令の要約

;; 5.2 レジスタ計算機シミュレータ

;; p.307

;; 問題 5.7

(define expt
 (make-machine
 '(continue n b val)
 (list (list '= =) (list '- -) (list '* *))
 '((assign continue (label expt-done))
   expt-loop
   (test (op =) (reg n) (const 0))
   (branch (label base-case))
   (save continue)
   (assing n (op -) (reg n) (const 1))
   (assign continue (label after-expt))
   (goto (label expt-loop))
   after-expt
   (restore continue)
   (assign val (op *) (reg b) (reg val))
   (goto (reg continue))
   base-case
   (assign val (const 1))
   (goto (reg continue))
   expt-done)))

(set-register-contents! expt 'b 2)

(set-register-contents! expt 'n 10)

(start expt)

(get register-contents expt 'val)

;; b.は略

;; 5.2.1 計算機モデル

;; p.308

;; レジスタ

;; スタック

;; p.309

;; 基本計算機

;; p.310

;; 図 5.13 make-new-machine

;; p.309

;; 5.2.2 アセンブラ

;; p.311

;; p.312

;; 問題 5.8

(define ex58
 (make-machine
 '(a)
 '()
 '(start
   (goto (label here))
   here
   (assign a (const 3))
   (goto label there)
   here
   (assign a (const 4))
   (goto (label there))
   there)))

(start ex58)

(get-register-contents ex58 'a)

;; p.313

;; 5.2.3 命令の実行手続きの生成

;; assign命令

;; p.314

;; test,branchおよびgoto命令

;; testの次には定数を書けない

(assign val (op =) (const 1) (const 0))
(test val)
(branch (label x))
(assign val (const 1))
(goto (label end))
(assing val (const 0)
 end)

;; p.315

;; その他の命令

;; p.316

;; p.317

;; 問題 5.9

;; 問題 5.10

;; assert を組み込んでみる --> testとbranchを使えばできてしまう
;; ブレークポイント --> 5.19 でやる

;; 問題 5.11

;; a.

 (save val)

afterfib-n-2
 (assign n (reg val))
 (restore val)

;; ↓

afterfid-n-2
 (restore n)

;; b.

;; 宿題

;; c.

;; 宿題

;; 問題 5.12

;; 宿題

;; 問題 5.13

;; 宿題

;; p.318

;; 5.2.4 計算機の性能の監視

;; 問題 5.14

loop
(assign n (op read))

;; 計算

(perform (op newline))
(assign (op display) (reg val))
(goto (label loop))

;; p.319

;; 問題 5.15

;; 問題 5.16

;; 和田先生の解答例

;; 問題 5.17

;; 問題 5.18

;; 問題 5.19

;; 宿題

;; 5.3 記憶の割当てとごみ集め

;; p.320

;; 5.3.1 ベクタとしてのメモリー

;; Lispデータの表現

;; p.321

;; 基本リスト演算の実装

;; p.322

;; スタックの実装

;; p.323

;; 問題 5.20


            1    2    3    4
         +----+----+----+----
the-cars | n1 | p1 | p1 |
         +----+----+----+----
                p1   p1

         +----+----+----+----
the-cars | n2 | e0 | p2 |
         +----+----+----+----
                p3   e0
;; 問題 5.21

;; a.

;; 和田先生の解答例

(define cl
 (make-machine
 '(tree val continue)
 (list (list 'null? null?) (list 'pair? pair?) (list '+ +) (list 'car car)
       (list 'cdr cdr))
 '((assign continue (label done))
  count-leaves
   (test (op null?) (reg tree))
   (branch (label base0))
   (test (op pair?) (reg tree))
   (branch (label else))
   (assing val (ccnst 1))
   (goto (reg continue))
  base0
   (assign val (const 0))
   (goto (reg continue))
  else
   (save continue)
   (save tree)
   (assign tree (op car) (reg tree))
   (goto (label count-leaves))
  x
   (restore tree)
   (assign tree (op cdr) (reg tree))
   (save val)
   (assign continue (label xx))
   (goto (label count-leaves))
  xx
   (assign tree (reg val))
   (restore val)
   (assign val (op +) (reg tree) (reg val))
   (restore continue)
   (goto (reg continue))
  done)))

(set-register-contents! cl 'tree '())

(start cl)

(get register-contents cl 'val)

次回は 12/7 p.323 問題 5.22 から。


-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)