在我的一门课程中,我遇到了这个:
numbers xs = [x | x<−xs , even x]
据我所知,它需要一个数字列表,并创建另一个仅使用原始列表中的偶数形成的列表。这究竟是怎么做到的? x<-xs
是什么意思?
答案 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"]