如何在给定的Scheme β-reductor中显示β归约中间项?
为Scheme的β归约器添加中间归约步骤打印的方法
我手头有一段用Scheme实现的β归约器代码,现在想分析它的β归约顺序,但因为对Scheme不太熟悉,找不到合适的位置插入(display term) (newline)代码,来显示归约过程中生成的纯lambda表达式中间项——目前这个归约器只能输出最终结果。
先贴出原始的β归约器代码:
(define (normalize v) (set! count 0) (set! reflected '()) (reify v)) (define (reify v) (if (memq v reflected) (v cancel) (let ((x (gensym))) (ABS x (reify (v (reflect x))))))) (define (reflect e) (let ((f (lambda (v) (if (eq? v cancel) e (reflect (APP e (reify v))))))) (set! reflected (cons f reflected)) f)) (define (APP e1 e2) `(,e1 ,e2)) (define (ABS x e) `(lambda (,x) ,e)) (define reflected '()) (define count 0) (define cancel '(cancel)) (define (gensym) (set! count (+ 1 count)) (string->symbol (string-append "x" (number->string count))))
接下来是验证用的测试项,包括Church数1和succ的Scheme定义:
(define One (lambda (f) (lambda (x) (f x)))) (define succ (lambda (n) (lambda (f) (lambda (x) (f ((n f) x))))))
测试调用是:(normalize (succ One))
想请教一下,能不能修改这段归约器代码,让它显示计算过程中的中间项?
内容的提问来源于stack exchange,提问作者ljedrz
相关产品推荐
相关产品推荐

