【发布时间】:2013-01-31 23:49:55
【问题描述】:
我在使用 Scheme 中一些看起来很棘手的 lambda 表达式时遇到了问题,我想看看解释器是如何评估它们的。
我希望 Scheme 解释器打印所有评估步骤,如 SICP Section 1.1.5, "The Substitution Model for Procedure Application" 所示。
我正在寻找使用任何 Scheme 解释器的解决方案。我已经尝试过Racket's tracing,但它只跟踪过程调用,而不是每个表达式。
激励例子
给定来自SICP Exercise 2.6的教会数字的定义:
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
和任务:
直接定义
one和two(不是zero和add-1)。
我希望根据评估(add-1 zero) 和(add-1 (add-1 zero)) 的结果来检查我对one 和two 的定义。
这是我希望 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)))
>
【问题讨论】:
标签: lambda scheme sicp operator-precedence interpreted-language