SICP 読み (239) 5.1 レジスタ計算機の設計
とゆー事でボーナスステイジ突入。マンガは直接テキストに書いてたりしてますが、アプは略、とゆー事で。
問題 5.2
こんなカンジになるんでしょうか。
(controller (assign c (const 1)) (assign p (const 1)) test-b (test (op >) (reg n) (reg c)) (branch (label factorial-done)) (assign t1 (op +) (reg c) (count 1)) (assign t2 (op *) (reg c) (reg p)) (assign c (reg t1)) (assign p (reg t2)) (goto (label test-b)) factorial-done)
テキストに答えをガンガン書いてる状態だったりします。(何
問題 5.3
ええと、最初の版はこんな感じだろうか。improve と good-enough? は基本演算として使えると仮定。
(controller test-b (test (op good-enough?) (reg g)) (branch (lebel sqrt-done)) (assign t (op improve) (reg g)) (assign g (reg t)) (goto (label test-b)) sqrt-done)
improve を展開してみる次の版は x なレジスタが必要。ここでも average は基本演算と仮定 (good-enough? も)
(controller test-b (test (op good-enough?) (reg g)) (branch (label sqrt-done)) (assign t2 (op /) (reg x) (reg g)) (assign t1 (op average) (reg g) (reg t2)) (assign g (reg t1)) (goto (label test-b)) sqrt-done)
次の版は average を展開してみる。
(controller test-b (test (op good-enough?) (reg g)) (branch (label sqrt-done)) (assign t2 (op /) (reg x) (reg g)) (assign t3 (op +) (reg t2) (reg g)) (assign t1 (op /) (reg t3) (constant 2)) (assign g (reg t1)) (goto (label test-b)) sqrt-done)
で良いのかなぁ。さらに good-enough? も展開。square と abs は基本演算ってコトで。
(controller test-b (assign t4 (op square) (reg g)) (assign t5 (op -) (reg t4) (reg g)) (assign t6 (op abs) (reg t5)) (test (op <) (reg t6) (constant 0.001)) (branch (label sqrt-done)) (assign t2 (op /) (reg x) (reg g)) (assign t3 (op +) (reg t2) (reg g)) (assign t1 (op /) (reg t3) (constant 2)) (assign g (reg t1)) (goto (label test-b)) sqrt-done)
で良いのかなぁ。テンポラリなレジスタの名前が微妙。この先も読んでるんですがなかなか面白い。それは良いのですが、この先どっち方面に進んでいくのだろうか。