使用
(define (double fn) (lambda (x) (fn (fn x))))
你能解释一下吗
((((double double) double) 1+) 0)
等于16?如何使用替换?
答案 0 :(得分:1)
double
函数接受另一个函数(让我们调用该函数fn
)作为它的参数,然后返回一个接受一个任意参数的函数。它将该参数传递给fn
,然后将 的结果传递给fn
,这就是结果。
例如:
> ((double add1) 1)
3
它在1上调用add1
,返回2,然后在2上调用add1
,它会给出结果,3。
在您的示例中,我们将double传递给它自己,所以现在我们有一个程序,当给出1+
时,我们会给它添加4(因为我们有两个double
's ,每个double
调用两个1+
。但接着我们传递了新的另一个 double
过程,这样我们就有八个double
(两个double
将调用两个1+
我们已经创建了)。这八次调用1+
中的每一次都是两次。
所以这个新程序将调用{{1}}两次,八次,你给它的任何参数,从而为你传递给它的任何参数增加16。
答案 1 :(得分:0)
如何使用替换?
如果您使用的是Racket,您可以在“使用lambda的中级学生”语言中使用DrRacket的步进工具来查看确切的替换步骤。