如何进行替换?我试图追踪,但我真的不明白发生了什么......代码:
(define (repeated f n)
(if (zero? n)
identity
(lambda (x) ((repeated f (- n 1)) (f x)))))
f 是一个函数,n 是一个整数,它给出了我们应该应用 f 的次数。....谁能帮我解释一下。我知道它会返回几个程序,我想相信它会成功f(f(f(x)))
好的,我会以不同的方式重新问这个问题,因为我上次并没有真正得到答案。考虑这段代码
(define (repeated f n)
(if (zero? n)
identity
(lambda (x) ((repeated f (- n 1)) (f x)))))
其中 n 是一个正整数, f 是一个任意函数:方案如何在此代码上运行假设我们给出(repeated f 2)
. 会发生什么?这是这样想的:
(f 2)
(lambda (x) ((repeated f (- 2 1)) (f x))))
(f 1)
(lambda (x) ((lambda (x) ((repeated f (- 1 1)) (f x)))) (f x))))
(f 0)
(lambda (x) ((lambda (x) (identity (fx)))) (fx))))
> (lambda (x) ((lambda (x) (identity (f x)))) (f x))))
> (lambda (x) ((lambda (x) ((f x)))) (f x))))
这是我首先被卡住了,我希望它去 (f(f(x)) 但现在我会得到 (lambda x ((fx) (fx)) ,括号肯定是错误的,但我想你明白我的意思意思是。我关于解释器如何工作的论点有什么问题