补全:递归
(每道题开头都有同一段:这门语言的 parser、show()、环境 Env(define / find / get / set,get 和 set 查不到就抛 RunError)、函数值 Closure(name, params, body, env)、用来「跳出函数」的 ReturnSignal。)
(这一节还带着完整的解释器:eval_(节点, env, out, stack) 算表达式,exec_ / exec_block 执行语句,call 调函数,run(src) 把 print 的东西用 | 连起来交回,run_safe 把运行时错误也变成一行文字。)
解释器不用改就支持递归——因为每次调用都是新环境。写一段这门语言的程序 PROG:定义 fib(n)(fib(0)=0,fib(1)=1),打印 fib(10);再定义 sum_to(n) 用递归求 1..n 之和,打印 sum_to(30)(本条解释器栈深 50,别算太大的)。
全部评论