1

使用

(define (double fn) (lambda (x) (fn (fn x))))

你能解释一下怎么做吗

((((double double) double) 1+) 0)

等于16??它是如何使用替换的?

4

2 回答 2

1

double函数接受另一个函数(让我们称之为 function fn)作为它的参数,然后返回一个接受一个任意参数的函数。它将参数传递给fn,然后将结果传递fn这就是结果。

例如:

> ((double add1) 1)
3

它调用add11,返回 2,然后调用add12,得到结果 3。

在您的示例中,我们将 double 传递给自身,因此现在我们有一个过程,当给定 your 时1+,它将向我们给它的任何内容添加 4(因为我们有两个double's,并且每个都double调用两个1+'s)。但是随后我们将我们的新过程传递给另一个 double,这样我们就有了八个(我们已经创建double的所有四个都将调用两个)。double这八个电话中的每一个都调用1+了两次。

所以这个新过程将调用1+两次,八次,你给它的任何参数,因此将16添加到你传递给它的任何参数。

于 2013-02-07T03:38:19.033 回答
0

它是如何使用替换的?

如果您使用的是 Racket,您可以使用 DrRacket 的 Stepper Tool 在“Intermediate Student with lambda”语言中查看确切的替换步骤。

于 2013-02-08T18:38:04.513 回答