匹配。如果我寫的只是:二郎 - 圖案的元組
[X || X <- [1,2,3,4,5,6,7,8,9,10]].
返回:
[1,2,3,4,5,6,7,8,9,10]
如果我寫:
[{a,b} || {a,b} <- [{1,2},{2,3}]].
返回
[]
簡單的問題 - 爲什麼?
匹配。如果我寫的只是:二郎 - 圖案的元組
[X || X <- [1,2,3,4,5,6,7,8,9,10]].
返回:
[1,2,3,4,5,6,7,8,9,10]
如果我寫:
[{a,b} || {a,b} <- [{1,2},{2,3}]].
返回
[]
簡單的問題 - 爲什麼?
發電機{a,b} < - [{1,2},{2,3}]是一個過濾器在同一時間。所以,當元素不匹配的模式,它只是跳過。
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Eshell V8.2 (abort with ^G)
1> [X || X <- [1,2,3,4,5,6,7,8,9,10]].
[1,2,3,4,5,6,7,8,9,10]
2> [{a,b} || {a,b} <- [{1,2},{2,3}]].
[]
3> [{a,b} || {a,b} <- [{1,2},{2,3},{a,b}]].
[{a,b}]
4>
7> Weather = [{toronto, rain}, {montreal, storms}, {london, fog},{paris, sun}, {boston, fog}, {vancouver, snow}].
[{toronto,rain},
{montreal,storms},
{london,fog},
{paris,sun},
{boston,fog},
{vancouver,snow}]
8> FoggyPlaces = [X || {X, fog} <- Weather].
[london,boston]
9> FoggyPlaces = [X || {X, fog1} <- Weather].
** exception error: no match of right hand side value []
10> [X || {X, fog1} <- Weather].
[]
11>
閱讀更多關於列表理解如果我寫:
[{A,B} || {A,B} <- [{1,2},{2,3}]].
返回
[{1,2},{2,3}]
它只是意味着大寫意味着數字而小寫意味着原子'值'?非常感謝 – Kornelia
@Kornelia:幾乎,大寫字母表示變量,小寫字母表示原子以及「大寫字母」。 –
雖然下面的答案是正確的,我想提一下,你可能打算做' [{A,B} || {A,B} < - [{1,2},{2,3}]]。'。 – Dogbert
符號來自數學,應該用聲明來閱讀。在第二種情況下,如果您將生成器讀作「對於列表中的所有對{A,B}」,則很明顯爲什麼會忽略任何不匹配的元素。除了模式,您可以添加更多條件;例如[...] {A,B} <- List, A > B]只選擇A大於B的對。 – RichardC