在我的課程之一,我碰到這樣的: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