在我的课程之一,我碰到这样的:Haskell中的x <-x是什么意思?
numbers xs = [x | x<−xs , even x]
我明白,它需要号码列表,并创建只与甚至从原来的列表编号形成另一个列表。它究竟如何做到这一点? x<-xs
是什么意思?
在我的课程之一,我碰到这样的:Haskell中的x <-x是什么意思?
numbers xs = [x | x<−xs , even x]
我明白,它需要号码列表,并创建只与甚至从原来的列表编号形成另一个列表。它究竟如何做到这一点? x<-xs
是什么意思?
这是一个list comprehension其中符号被设计为类似于set builder notation与对应于程式化小写希腊语的ε-这对于集成员资格的标准符号令牌<-
。当我阅读列表解析时,我倾向于将<-
读作“从...中抽取”,因此我会将[x | x<−xs , even x]
解析为“所有x的列表,使得x从xs绘制,并且x是偶数”(,
对应于and
并且用于添加条件不仅仅是列表中的成员资格)。
正如其他答案所述,这是一个列表理解符号,这意味着根据另一个列表定义一个列表。如果在|
之后的部分中指定了一些谓词,则将仅采用满足这些谓词的元素,例如[x | x <- xs, even x]
是从列表xs
中取得的所有那些元素的列表,它们是偶数(满足条件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"]
,它意味着“采取列表中的每个元素'xs'并依次用'x'替换每个这样的元素。更一般地说,在monadic上下文中(一个do块),它意味着名称绑定到monadic动作的返回值。 –
阅读[list comprehension](https://wiki.haskell.org/List_comprehension)。 – Bakuriu