我在 Scheme 中遇到了一些看起来很棘手的 lambda 表达式,我想看看解释器是如何评估它们的。
我希望 Scheme 解释器打印所有评估步骤,如SICP 第 1.1.5 节“过程应用的替代模型”中所示。
我正在寻找使用任何方案解释器的解决方案。我已经尝试过Racket 的跟踪,但它只跟踪过程调用,而不是每个表达式。
激励例子
鉴于SICP 练习 2.6中教会数字的定义:
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
和任务:
直接定义
one
andtwo
(不是根据zero
andadd-1
)。
我希望检查我的定义,one
并two
对照评估(add-1 zero)
和的结果(add-1 (add-1 zero))
。
这就是我希望 Scheme 解释器打印出来的内容:
> (add-1 zero)
(add-1 (lambda (f) (lambda (x) x)))
(lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x))))
(lambda (f) (lambda (x) (f ((lambda (x) x) x))))
(lambda (f) (lambda (x) (f x)))
>