2015-11-07 104 views
1

在我的課程之一,我碰到這樣的:Haskell中的x <-x是什麼意思?

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

我明白,它需要號碼列表,並創建只與甚至從原來的列表編號形成另一個列表。它究竟如何做到這一點? x<-xs是什麼意思?

+0

,它意味着「採取列表中的每個元素'xs'並依次用'x'替換每個這樣的元素。更一般地說,在monadic上下文中(一個do塊),它意味着名稱綁定到monadic動作的返回值。 –

+0

閱讀[list comprehension](https://wiki.haskell.org/List_comprehension)。 – Bakuriu

回答

5

這是一個list comprehension其中符號被設計爲類似於set builder notation與對應於程式化小寫希臘語的ε-這對於集成員資格的標準符號令牌<-。當我閱讀列表解析時,我傾向於將<-讀作「從...中抽取」,因此我會將[x | x<−xs , even x]解析爲「所有x的列表,使得x從xs繪製,並且x是偶數」(,對應於and並且用於添加條件不僅僅是列表中的成員資格)。

0

正如其他答案所述,這是一個列表理解符號,這意味着根據另一個列表定義一個列表。如果在|之後的部分中指定了一些謂詞,則將僅採用滿足這些謂詞的元素,例如[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"] 
相關問題