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)如何使用这些真假函数?
这里发生的事情就像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函数返回两个参数中的第二个参数.