【发布时间】:2016-07-25 03:45:02
【问题描述】:
我在 Moonscript Lua 中编写了一个简单的 Lisp 解释器。 评估器如下所示:
eval = ( env, expr ) ->
if is_symbol expr
lookup env, expr
elseif is_define expr
eval_define env, expr
elseif is_lambda expr
eval_lambda env, expr
else call (map (partial eval, env), expr)
它工作正常。 但现在我真的很想追踪这个过程,看起来像这样:
(+ (+ a b) (+ a c))
(+ (+ 1 2) (+ 1 4))
(+ 3 5)
8
问题是,由于评估过程是递归的,我在任何时候都无法打印出整个表达式。
我是否必须以命令式风格重写评估器,还是我遗漏了一些明显的东西?
【问题讨论】:
-
如果您希望跟踪看起来好像正在发生的事情与实际发生的事情不同,那么您可能需要编写一个执行不同事情的评估器,是的。就个人而言,我希望跟踪显示评估者实际做了什么。
标签: lua lisp interpreter trace evaluation