在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]
Run Code Online (Sandbox Code Playgroud)
有人可以解释这部分(\x -> 6*x < 100)意味着什么吗?
它是一个匿名函数定义,也称为lambda表达式. (\x -> 6*x < 100)是一个带有数字的函数,并返回不等式的布尔结果.
由于像Haskell这样的函数式语言经常将函数作为参数,因此能够在线定义简单函数是很方便的,而无需为它们指定名称.
原来,故事的结局,邱奇想用,以纪念在函数表达式变量抑扬,例如像(?.x(yz))但普林斯顿印刷机只是无法做到这一点的时候.然后,他想至少要打印插入符号的增值经销商之前,像这样:(^y.x(yz)),但他们不能这样做,要么.
下一个最好的选择是使用希腊字母lambda,因此他们最终写作(?y.x(yz))等,因此lambda表达式中的"lambda" .这只是一个印刷事故.
今天在ASCII终端上我们甚至不能使用这个字母?,因此在Haskell中我们使用反斜杠(而用箭头代替原始lambda表达式表示法中的点):
(\y -> x (y z))
Run Code Online (Sandbox Code Playgroud)
代表g这样的功能
g y = x (y z)
Run Code Online (Sandbox Code Playgroud)
来源:在某处读它,不记得在哪里.