如何解决SICP第5章:在显式控制评估器中,分派式如何提高效率?
我正在通过SICP,正在进行第5章-实施显式控制评估程序。
他们首先为eval-dispatch
编写机器语言
eval-dispatch
(test (op self-evaluating?) (reg exp))
(branch (label ev-self-eval))
(test (op variable?) (reg exp))
(branch (label ev-variable))
(test (op quoted?) (reg exp))
(branch (label ev-quoted))
(test (op assignment?) (reg exp))
(branch (label ev-assignment))
(test (op deFinition?) (reg exp))
(branch (label ev-deFinition))
(test (op if?) (reg exp))
(branch (label ev-if))
(test (op lambda?) (reg exp))
(branch (label ev-lambda))
(test (op begin?) (reg exp))
(branch (label ev-begin))
(test (op application?) (reg exp))
(branch (label ev-application))
(goto (label unkNown-expression-type))
但是,they note here也可以以数据定向的方式完成此操作:
在我们的控制器中,调度以测试和分支指令的顺序编写。另外,它可以以数据定向的方式编写(在真实系统中可能已经编写过),以避免需要执行顺序测试并简化新表达式类型的定义。设计为运行Lisp的机器可能会包含“按类型分配”指令,该指令可以有效地执行此类数据定向的分配。
我不太确定我是否理解它们在这里的含义:
-
instruction
在这里是什么意思?我是否正确理解这将是op
类似的东西:
(assign type (op dispatch-on-type) (reg exp))
(goto type)
我不太确定为什么以这种方式编写dispatch-on-type
会使添加新的表达式类型变得更加容易
- 他们注意到lisp机器将有效地实施
dispatch-on-type
我不太确定我理解这一点。有什么方法可以使它比eval-dispatch
已经做的事情更有效率?我猜想dispatch-on-type
必须运行测试以确定它是什么类型
解决方法
好的,我注意到效率上的一个差异:
在此版本中,机器仍然检查branch
指令。
如果我们使用数据导向的方法,我们可以避免这些检查
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。