递归程序,反复应用任何程序多次

时间:2014-03-22 07:36:21

标签: scheme

(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)))

我们如何评价这个?

1 个答案:

答案 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