17 hours ago
- 文章描述了在Haskell中实现数字电路模拟器,紧密遵循SICP的方法,使用可变状态和消息传递。
- 导线使用IORef定义信号值和动作过程,实现观察者模式,下游组件订阅信号变化。
- 基本门电路(反相器、与门、或门)实现为动作过程,在延迟后更新输出导线,使用全局可变日程表进行调度。
- 更高级别的电路如半加器和全加器通过将门电路连接在一起构成,展示了开放且可组合的组件系统。
- 模拟器通过`unsafePerformIO`使用全局`the_agenda`管理传播延迟,允许模拟如环形振荡器这样的电路。
- 作者指出,尽管代码不纯净,但Haskell仍然可以有效地使用副作用,未来的工作可以使用ST探索纯模拟。