在计划中使用多个lambdas意味着什么?

Jam*_*son 3 lambda scheme functional-programming lambda-calculus currying

我正在学习计划,我遇到了这些功能:

(define t (lambda (x) (lambda (y) x))) 
(define f (lambda (x) (lambda (y) y))) 
Run Code Online (Sandbox Code Playgroud)

显然,它们是真假的功能.我不知道为什么!

我有两个问题:

1)连续的lambdas是什么意思?我只习惯看到一个用于将参数传递给函数的lambda; 即

(define add
  (lambda (x y)
    (+ x y)))
Run Code Online (Sandbox Code Playgroud)

通过调用(add 1 5)我将6作为输出提供.

2)如何使用这些真假函数?

Hay*_*den 7

这里发生的事情就像currying一样 - 转换一个函数,它接受多个参数,这样它就可以被称为函数链

让我们考虑一个带有2个参数的函数f,即f(x,y).存在一元函数g,使得f(x,y)= g(x)(y)=(g(x))(y).函数g被称为f 的curried版本.

g是一个期望一个参数(x)的函数,而g(x)的值也是一个参数y的函数.

让我们考虑一个curried-add函数:

(define curried-add 
  (lambda (x) 
    (lambda (y) (+ x y))))

((curried-add 1) 5)
Run Code Online (Sandbox Code Playgroud)

对(curried-add 1)的调用将返回一个函数,该函数接受一个参数,在我们的例子中为5,并将其加到1,给出和输出6.

我们可以将这些咖喱添加链接在一起以获得:

((curried-add ((curried-add 1) 2)) 3)
Run Code Online (Sandbox Code Playgroud)

会产生6的输出.这是因为(curried-add 1)将返回一个期望一个参数的函数,在这种情况下为2.因此将1添加到2并生成一个函数,该函数期望一个参数可以添加到3我们刚刚制作完成.

在这种情况下你的真假功能.

的确如此: (define t (lambda (x) (lambda (y) x)))

错误是: (define f (lambda (x) (lambda (y) y)))

true函数接受两个参数并返回第一个参数,false函数返回两个参数中的第二个参数.