(define (repeated proc n)
(if (= n 0)
(lambda (x) x)
(lambda (x)
(proc
((repeated proc (- n 1)) x)))))
我在理解这个过程如何返回一个带有单个参数的过程并且递归地将proc应用于它n次时遇到了一些麻烦。
如果n = 2,这是返回的程序吗?
(lambda (x) (proc (((lambda (x) (proc (((lambda (x) x)) x)))) x)))
我们如何评价这个?
答案 0 :(得分:2)
这就是发生的事情
(repeated proc 2)
-> (lambda (x) (proc ((repeated proc 1) x)))
-> (lambda (x) (proc ((lambda (x) (proc ((repeated proc 0) x))) x)))
-> (lambda (x) (proc ((lambda (x) (proc ((lambda (x) x) x))) x)))
不
(lambda (x) (proc (((lambda (x) (proc (((lambda (x) x)) x)))) x)))
测试
(define (R2 proc) (lambda (x) (proc ((lambda (x) (proc ((lambda (x) x) x))) x))))
((R2 add1) 5)
=> 7