在Haskell中需要帮助理解(\ x - >)

时间:2013-04-26 17:27:50

标签: haskell

在ZVON上,为takeWhile函数提供的定义之一是

Input: takeWhile (\x -> 6*x < 100) [1..20]

Output: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

有人可以解释(\x -> 6*x < 100)部分的含义吗?

4 个答案:

答案 0 :(得分:8)

这是一个匿名函数定义,也称为lambda表达式。 (\x -> 6*x < 100)是一个接受数字的函数,并返回不等式的布尔结果。

由于像Haskell这样的函数式语言经常将函数作为参数,因此能够在线定义简单函数是很方便的,而无需为它们指定名称。

答案 1 :(得分:8)

最初的故事是,Alonzo Church想要用circumflex标记功能表达式中的变量,例如(ŷ.x(yz))但普林斯顿印刷机当时无法做到这一点。然后他想至少在vars之前打印carets,如下所示:(^y.x(yz)),但他们也不能这样做。

下一个最佳选择是使用希腊字母 lambda ,因此他们最终编写了(λy.x(yz))等,因此 lambda-expression <中的“lambda” / em>的。这只是一个印刷事故。

今天在ASCII终端上我们甚至不能使用字母λ,因此在Haskell中我们使用反斜杠(并用箭头代替原始lambda-expressions notation中的点):

(\y -> x (y z))

代表函数g,以便

g y = x (y z)

来源:在某处读它,不记得在哪里。

答案 2 :(得分:4)

(\x -> 6*x < 100)是一个 lambda ,一个匿名函数,它接受一个参数(此处称为x)并计算&amp;返回6*x < 100,即测试该数字乘以6是否小于100.

答案 3 :(得分:4)

它是一个lambda函数,也就是说,你在现场定义的函数主要是为了方便起见。您将其读作“将x作为输入,乘以6,看它是否小于100”。不过,还有一些其他相关设施。例如,在Haskell中,Lambda函数和普通函数具有关联的词法环境并且正确地说closures,因此它们可以使用环境作为输入来执行计算。