在scheme中使用多个lambda意味着什么?
我目前正在学习该计划,我遇到了以下功能:在scheme中使用多个lambda意味着什么?,lambda,functional-programming,scheme,currying,lambda-calculus,Lambda,Functional Programming,Scheme,Currying,Lambda Calculus,我目前正在学习该计划,我遇到了以下功能: (define t (lambda (x) (lambda (y) x))) (define f (lambda (x) (lambda (y) y))) 显然,它们是真与假函数的表示。我不知道为什么 我有两个问题: 1) 连续的lambda是什么意思?我只习惯于看到一个lambda,用于将参数传递给函数;i、 e (define add (lambda (x y) (+ x y))) 通过调用(add15)我将获得6作为输出 2)
(define t (lambda (x) (lambda (y) x)))
(define f (lambda (x) (lambda (y) y)))
显然,它们是真与假函数的表示。我不知道为什么
我有两个问题:
1) 连续的lambda是什么意思?我只习惯于看到一个lambda,用于将参数传递给函数;i、 e
(define add
(lambda (x y)
(+ x y)))
通过调用(add15)
我将获得6
作为输出
2) 如何使用这些真函数和假函数?它们是函数,当使用1个参数调用时,将返回另一个函数。所以你可以这样称呼他们-
(define v (some expression that returns t or f))
((v 'foo) 'bar) ; ==> foo if v is t, bar if v is f
这有点像
(如果v'foo'bar)
,带有普通的内置布尔值。在简单的lambda演算中,它经常被用来对真/假进行编码。这里发生的事情被称为-转换一个函数,该函数接受n个多参数,这样它就可以被称为一个函数链
让我们考虑一个函数f,它取2个参数,即f(x,y)。存在一元函数g,使得f(x,y)=g(x)(y)=(g(x))(y)。函数g被称为f的当前版本
g是一个需要一个参数(x)的函数,g(x)的值也是一个参数y的函数让我们考虑一个CurryAdd函数:
(define curried-add
(lambda (x)
(lambda (y) (+ x y))))
((curried-add 1) 5)
调用(curried add 1)将返回一个函数,该函数接受一个参数,在我们的示例5中,将其添加到1,并给出6的输出
我们可以将这些咖喱添加链接在一起,以获得:
((curried-add ((curried-add 1) 2)) 3)
将产生6的产量。这是因为(curry add 1)将返回一个需要一个参数的函数,在本例中为2。因此,将1添加到2并生成一个函数,该函数需要一个参数,该参数可以添加到我们刚刚创建的3中
在这个例子中,你的真函数和假函数
真的是:(定义t(λ(x)(λ(y)x))
False是:(定义f(λ(x)(λ(y)y))
true函数接受两个参数并返回第一个参数false函数
返回两个参数中的第二个。正如@Hayden在回答中指出的,连续的lambda是一个示例,本质上只是一个返回另一个函数的函数:
(define curried-add
(lambda (x)
(lambda (y) (+ x y))))
((curried-add 1) 5)
在数学和计算机科学中,curry是一种转换函数的技术,该函数具有n个多参数(或n个参数元组),可以将其称为函数链,每个函数具有一个参数(部分应用)。它起源于摩西·舍芬克尔,后来被哈斯克尔·库里重新发现
关于问题的第二部分:布尔值可以被编码为函数,它是在中使用的真值的表示,请参阅链接以了解它们的使用方式:
Church boolean是布尔值true和false的Church编码。一些编程语言使用它们作为布尔运算的实现模型;例如Smalltalk和Pico。布尔值表示为两个值的函数,这两个值的计算结果为它们的一个或另一个参数。lambda演算中的形式定义: