2015-06-21 26 views
6

我從Learn You Some Erlang正在學習Erlang,我已經看到[_|_]兩次了,但是找不到任何信息。這個用法看起來是多餘的,因爲從(1)中省略它並用(2)中的_替代它會得到相同的結果而不會降低可讀性。這是我與Erlang的第一週,所以我可能完全錯誤。Erlang中的模式[_ | _]是否意味着任何特定的東西?

(1)從bestest_qsort

bestest_qsort(L=[_|_]) -> 
    bestest_qsort(L, []). 

(2)從here

error:{badmatch,[_|_]} -> ok 

回答

11

圖案[p1 | p2]一個非空的列表中,其頭部圖案p1匹配並且其尾部匹配相匹配模式p2。因此,由於模式_匹配任何內容,因此[_ | _]與任何非空列表匹配。

_本身另一方面匹配任何東西,包括空列表。

+5

@toraritte試試'F([2,3])'。模式'[p]'匹配一個只包含一個匹配'p'的元素的列表。它不匹配具有多個元素的列表(否則,例如'[1,2]'將匹配模式'[1]',這沒有意義 - '[1] = [1,2]'應該清楚不匹配)。 – sepp2k

相關問題