2014年11月29日土曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の5(レジスタ計算機での計算)、5.2(レジスタ計算機シミュレータ)、5.2.3(命令実行手続きの生成)、問題 5.11-a.を解いてみる。

その他参考書籍

問題 5.11-a.

レジスタ計算機記述言語

(controller
   (assign continue (label fib-done))
 fib-loop
   (test (op <) (reg n) (const 2))
   (branch (label immediate-answer))
   (save continue)
   (assign continue (label afterfib-n-1))
   (save n)
   (assign n( op -) (reg n) (const 1))
   (goto (label fib-loop))
 afterfib-n-1
   (restore n)
   (assign n (op -) (reg n) (const 2))
   (save val)
   (goto fib-loop)
 afgerfib-n-2
   ;; (assign n (reg val)) ;nにはFib(n - 2)がある
   ;; (restore val)     ;valにはFib(n - 1)がある 
   (restore n)             ;valにはFib(n - 2)がある。nにはFib(n - 1)がある
   (restore continue)
   ; 命令を除去する前 Fib(n - 1) + Fib(n - 2)
   ; 命令を除去した後 Fib(n - 2) + fib(n - 1)
   (assign val (op +) (reg val) (reg n)) 
   (goto (reg continue))
 immediate-answer
   (assign val (reg n))
   (goto (reg continue))
 fib-done)
   

0 コメント:

コメントを投稿