2011-08-16 56 views
4

如果我的問題措辭不好,但我似乎缺乏特別要求的話。如何閱讀此列表?

我在搜索Haskell學習資源時找到一行,其結果是從1到1000的三個倍數的列表。我明白這條線是幹什麼的,在GHCi中看到評估並不難。

[n | n <- [1..1000], n `rem` 3 == 0] 

我實際的問題是我不知道如何讀純englisch和究竟是如何生成的列表中,什麼n | n <- [1..1000]方式這條線。 這可以讀取類似於for循環?

這樣的表達在我讀過的基本教程中沒有涉及。我在哪裏可以找到被認爲是初學者閱讀的文檔,並介紹如何清楚地閱讀表達式?

這將極大地提高我的性學習的過程中,如果我竟有些詞彙描述什麼I型那裏;)

+2

向你學習Haskell For Good Good在本書開頭部分有一節 - http://learnyouahaskell.com/starting-out#im-a-list-comprehension – ocharles

+0

有趣的東西。我知道它,但確實從Real World Haskell開始,在包含列表的許多不同示例之後,它在第280頁的相當晚的時候涵蓋了它。現在我不明白爲什麼這是生成特定列表的好方法。 –

+1

順便說一下,這種表示法的靈感來自所謂的[set-builder notation](http://en.wikipedia.org/wiki/Set-builder_notation) – hvr

回答

9
[n | n <- [1..1000], n `rem` 3 == 0] 

被稱爲list comprehension。它基本上可以理解爲:「n的列表,其中n在1到1000的範圍內,n個餘數3 == 0」。

+0

列表理解是術語缺失。現在我知道要尋找什麼。謝謝。 –

9

[n | n <- [1..1000], n REM 3 == 0]是列表中的所有n這樣n[1 .. 1000]n `rem` 3 == 0

它意思是類似於設定的符號(即{n | n ∈ (1..1000), n ≡ 0 mod 3})。

+0

謝謝你的「翻譯」。 –