理解 Scheme 中的 repeat 函数
understanding the repeat function in Scheme
Scheme中重复一个函数的代码如下:
(define (repeat f n)
(if (= n 1)
f
(lambda (x) (f ((repeat f (- n 1)) x)))))
但我不明白这里的递归如何与 lambda(x) 等一起工作。
有人可以用 (repeat f 3) 这样的例子来解释吗?
谢谢
需要注意的是,这个 repeat
函数实际上并没有调用 f
n
次。它 returns 一个将调用 f
n
次的新函数。您可以在基本情况下看到这一点:当 (= n 1)
时,它只是 returns f
,它不会执行 (f)
.
(repeat f (- n 1))
递归调用 repeat
来获得一个少调用 f
一次的函数。 lambda
然后用于构造一个调用此新函数的新函数,然后调用 f
进行总 n
次调用。
使用替代方法并“向上”工作:
(repeat f 1)
--> f
如果 f
是一元函数, 等同于 (lambda (x) (f x))
。
然后,
(repeat f 2)
--> (lambda (x) (f ((repeat f 1) x)))
--> (lambda (x) (f (f x)))
和
(repeat f 3)
--> (lambda (x) (f ((repeat f 2) x)))
[through name change in the "inner" lambda]
--> (lambda (x) (f ((lambda (y) (f (f y))) x)))
[through ((lambda (y) (f (f y))) x) --> (f (f x))]
--> (lambda (x) (f (f (f x))))
Scheme中重复一个函数的代码如下:
(define (repeat f n)
(if (= n 1)
f
(lambda (x) (f ((repeat f (- n 1)) x)))))
但我不明白这里的递归如何与 lambda(x) 等一起工作。
有人可以用 (repeat f 3) 这样的例子来解释吗?
谢谢
需要注意的是,这个 repeat
函数实际上并没有调用 f
n
次。它 returns 一个将调用 f
n
次的新函数。您可以在基本情况下看到这一点:当 (= n 1)
时,它只是 returns f
,它不会执行 (f)
.
(repeat f (- n 1))
递归调用 repeat
来获得一个少调用 f
一次的函数。 lambda
然后用于构造一个调用此新函数的新函数,然后调用 f
进行总 n
次调用。
使用替代方法并“向上”工作:
(repeat f 1)
--> f
如果 f
是一元函数, 等同于 (lambda (x) (f x))
。
然后,
(repeat f 2)
--> (lambda (x) (f ((repeat f 1) x)))
--> (lambda (x) (f (f x)))
和
(repeat f 3)
--> (lambda (x) (f ((repeat f 2) x)))
[through name change in the "inner" lambda]
--> (lambda (x) (f ((lambda (y) (f (f y))) x)))
[through ((lambda (y) (f (f y))) x) --> (f (f x))]
--> (lambda (x) (f (f (f x))))