Haskell中的x< -xs是什么意思?

时间:2015-11-07 12:50:06

标签: haskell

在我的一门课程中,我遇到了这个:

numbers xs = [x | x<−xs , even x] 

据我所知,它需要一个数字列表,并创建另一个仅使用原始列表中的偶数形成的列表。这究竟是怎么做到的? x<-xs是什么意思?

2 个答案:

答案 0 :(得分:5)

这是list comprehension,其中符号的设计类似于set builder notation,其中令牌<-对应于程式化的小写希腊语epsilon,它是集合成员资格的标准符号。当我阅读列表推导时,我倾向于将<-读作&#34;从&#34;中抽取,所以我将[x | x<−xs , even x]解析为&#34;所有x的列表,使x从中抽取xs和x是偶数&#34; (,对应and,用于添加条件,而不仅仅是从中抽取的列表中的成员资格。

答案 1 :(得分:0)

正如其他答案所述,这是一个列表理解符号,这意味着一种根据另一个列表定义列表的方法。如果在|之后在部件中指定一些谓词,则只会采用满足这些谓词的元素,例如[x | x <- xs, even x]是从列表中x获取的所有元素的列表xs 1}}是偶数(满足条件even x)。可以有多个谓词:

[x | x <- xs, even x, x > 10]

您还可以对绘制的元素应用转换,包括更改列表类型:

λ> [x*2 | x <- [1 .. 20], even x, x > 10]
[24,28,32,36,40]

或:

λ> [show x | x <- [1 .. 20], even x, x > 10]
["12","14","16","18","20"]