这里发生的事情被称为柯里化 - 转换一个接受 n 个多个参数的函数,使其可以被称为函数链
让我们考虑一个有 2 个参数的函数 f,即 f(x,y)。存在一个一元函数 g 使得 f(x,y) = g(x)(y) =(g(x))(y)。函数 g 被称为 f 的柯里化版本。
g 是一个函数,它需要一个参数 (x),而 g(x) 的值也是一个参数 y 的函数。
让我们考虑一个 curried-add 函数:
(define curried-add
(lambda (x)
(lambda (y) (+ x y))))
((curried-add 1) 5)
对 (curried-add 1) 的调用将返回一个函数,该函数接受一个参数,在我们的例子中是 5 并将其添加到 1,给出和输出 6。
我们可以将这些 curried-add 链接在一起以获得:
((curried-add ((curried-add 1) 2)) 3)
将产生输出 6。这是因为 (curried-add 1) 将返回一个需要一个参数的函数,在本例中为 2。因此,将 1 添加到 2 并生成一个需要一个参数的函数,该参数可以添加到3 我们刚做的。
在这种情况下,您的真假功能。
真实的是:(define t (lambda (x) (lambda (y) x)))
错误的是:(define f (lambda (x) (lambda (y) y)))
true 函数接受两个参数并返回第一个,false 函数返回两个参数中的第二个。