1

PLAI的第 9 章“理解递归”中,一开始有一个阶乘示例:


(with (fac (fun (n)
                (if0 n 
                     1
                     (* n (fac (+ n -1))))))

在第 90 页,作者说“在继续阅读之前,请暂停片刻,仔细研究程序,写下每个阶段的环境,逐步通过解释器,甚至可以运行程序,以说服自己“这个错误将会发生。彻底理解错误对于遵循本节的其余部分至关重要。”
但是我不确定我是否可以完整地写下这些步骤,有人愿意帮我写下这些步骤吗?提前非常感谢!

4

2 回答 2

2

让您的口译员为您打印出这些步骤。

(define (interp expr env)
  (displayln (list 'expr expr 'env env))
  (type-case CFAE/L expr
于 2012-08-18T09:25:37.447 回答
0

阅读并运行第 10 章的代码后,独立执行上述程序的中间步骤,如


(interp  (if0 (id 'n) (num 1) (mult (id 'n) (app (id 'fac) (sub (id 'n) (num 1)))))
           (aSub 'n
                 (numV 2)
                 (closureV-env (lookup 'fac new-env))))

我可以手写步骤!感谢每一个人!

于 2012-08-19T04:22:12.307 回答