【发布时间】:2012-02-15 05:37:25
【问题描述】:
我正在尝试基于 SICP 中的元循环评估器编写一个玩具 python Scheme 解释器。由于 python 只支持有限深度的调用栈,所以我必须消除尾调用。我阅读了蹦床并用它实现了解析器。
但我不知道如何以连续传递风格编写分析器/评估器函数以将它们与蹦床一起使用。比如eval-if函数:
(define (eval-if expr env)
(if (is-true? (eval (if-predicate expr) env))
(eval (if-consequent expr) env)
(eval (if-alternate expr) env)))
在python中:
def eval_if(expr, env):
if is_true(eval(if_predicate(expr), env)):
return eval(if_consequent(expr), env)
else:
return eval(if_alternate(expr), env)
当我想检查谓词是否为真时,我必须在其上调用新一轮的eval。这种CPS形式的递归调用应该怎么写?
【问题讨论】:
标签: scheme sicp continuation-passing trampolines