2017-02-10 109 views
0

匹配。如果我寫的只是:二郎 - 圖案的元組

[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}]]. 

返回

[] 

簡單的問題 - 爲什麼?

+3

雖然下面的答案是正確的,我想提一下,你可能打算做' [{A,B} || {A,B} < - [{1,2},{2,3}]]。'。 – Dogbert

+0

符號來自數學,應該用聲明來閱讀。在第二種情況下,如果您將生成器讀作「對於列表中的所有對{A,B}」,則很明顯爲什麼會忽略任何不匹配的元素。除了模式,您可以添加更多條件;例如[...] {A,B} <- List, A > B]只選擇A大於B的對。 – RichardC

回答

4

發電機{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> 

你可以從learnyousomeerlang

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> 
0

閱讀更多關於列表理解如果我寫:

[{A,B} || {A,B} <- [{1,2},{2,3}]]. 

返回

[{1,2},{2,3}] 
+1

它只是意味着大寫意味着數字而小寫意味着原子'值'?非常感謝 – Kornelia

+0

@Kornelia:幾乎,大寫字母表示變量,小寫字母表示原子以及「大寫字母」。 –