给定一个函数,例如斐波那契递归的树递归实现,我如何显示评估表达式的每个步骤,例如(fib 5)
?
(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1)
(fib (- n 2))))))
例如,我想输出:
(fib 5)
(+ (fib 4) (fib 3))
(+ (+ (fib 3) (fib 2)) (+ (fib 2) (fib 1)))
(+ (+ (+ (+ (fib 1) 0) (fib 1) (+ (fib 1) 0)) (+ (+ (fib 1) 0) (fib 1)))
(+ (+ (+ (+ 1 0) 1 (+ 1 0)) (+ (+ 1 0) 1))
我知道使用 quasiquoting,您可以部分评估表达式,如:
`(+ ,(* 3 4) (- 0.1 2)) ; evaluates to -┐
(+ 12 (- 0.1 2)) ; <----┘
但是,我无法使用它来展示评估中的每个步骤。我知道我可以修改像 Peter Norvig 的lis.py这样的方案解释器,但我想要一种在语言本身内完成的方法。我怎样才能做到这一点?