SICP 第二版 5.2 节提到的 Register Machine Simulator 我用 Clojure 重写了一遍,完全不用 mutable states。每执行一条指令都可以打出当时机器的状态,甚至可以把这些状态保存起来。这就是 Clojure 牛逼的地方……
程序里的模型跟书上不太一样,为了方便对时间的管理(也就是为了用不变体搞定原本需要可变体搞定的事)。Machine 只包含寄存器和栈。操作集和解析过的指令都不作为 Machine 的一部分。因为它们在程序运行过程中是不会变的。
比较有意思的是指令的初始化过程。原本书的指令(instructions/controller)是可变体。先扫一圈,把 label 扫出来,然后后续在往以 label 为 key 的 map 里面塞解析过的指令。这招在用不变体建模的时候就不管用了。因为要解析指令,完整的 labels 列表就是必须的。而给定一个 label 又必须能找到它所对应的指令才算有意义。所以这里出现了一个循环依赖。我就在这两者之间加了一个程序计算器(index/program counter)。原本书中的 pc register 里面放的是一串指令列表,我这里面回归本源,又放的是整数了。
这个模拟器运行书中 5.2 节计算最大公约数和 Fabonacci 数的程序都没有问题。
google code 上的 mercurial 库地址:
https://regmachine-simulator.googlecode.com/hg
分享到:
相关推荐
Turing Machine Simulator
图灵机模拟器接受输入并准备TM程序并对其进行模拟。 该程序也可以保存和重新加载。
套准机模拟器 用Python编写的注册机模拟器,作为代码解释器。 如何使用 py rm_interpreter.py [absolute path to rm file] [optional -p or -w] 去做 英文自述文件 德语自述文件 所有29个命令及其功能按类别排序 ...
cx-simulator1.7到cx-simulator1.8升级补丁rar,cx-simulator1.7到cx-simulator1.8升级补丁
这款被简称为msts的游戏是2000年代初期面市的,作为当时唯一一款成熟的铁路模拟游戏,它几乎垄断了当时所有铁路玩家的目光,在中国长盛不衰,至今仍有一批死忠用户(当然,几乎完全是盗版用户)。然而由于MSTS早已...
Tuatara Turing Machine Simulator是用于设计和执行Turing Machines的图形工具。 设计主要用于教学目的,它具有简单的点击界面。
S7-200 is an easy-to-learn software designed specifically for ... The software can be used to solve various automation tasks quick and easy program development and reduce design time.S7-200_simulator
解决使用Tornado过程中不能启动simulator的补丁
a simple Java program for simulating an abstract Turing machine. This demonstrates that Java is Turing-complete (with the caveat that limitations in word size limit the effective addressable memory).
simulator for 8051 microcontroller
Product Version 15.1 October 2015
A PLC simulator for WINDOWS
ns3 network simulator
LTE system level simulator
RISK SIMULATOR在微软Excel上运行,能够快速地进行蒙特卡罗(Monte Carlo)模拟法来预测所有可能的结果,运用图表对分析结果进行总结,并显示每一个结果对应的概率,量化项目的风险,帮助您从主观的估计和猜测中解脱...
this is a simulator about capability
IAR串口Simulator仿真中断的调试实现
Load Simulator 2003
Goat.Simulator 汉化