我已經開始學習二郎最近和整個以下錯誤就試圖pattren比賽Erlang的模式匹配誤差
下面的表達式是工作的罰款:
{A,_,[B|_],{B}}={abc,23,[22,x],{22}}.
Resulting in
A = abc
B = 22
以下表達式不工作:
{A,_,[_|B],{B}}={abc,23,[22,x],{x}}.
Is resulting in
** exception error: no match of right hand side value {abc,23,[22,x],{x}}
但是,如果我將[22,x中的','替換爲|像下面它的工作發現和邊界x到B
{A,_,[_|B],{B}}={abc,23,[22|x],{x}}.
{abc,23,[22|x],{x}}
B.
x
任何關於這個解釋將不勝感激。
很多感謝
[_ | Whatever]可能意指字面意義上的* anything *,所以它不能匹配,因爲'_'可以消耗/匹配任何東西,包括匹配的整個元素。這意味着「任何東西,隨後是」無論什麼「 - 我們在這裏沒有定義」。 '[22 |無論]'還是任何'[FiniteThing | _]'意思是「具體和有限的東西,後面是'Whatever'」,可以匹配,因爲它可以完全匹配和消耗列表的第一部分。 IOW,「任何事物」匹配/消耗*一切*,而一個特定和有限的事物只能表現自己。 – zxq9 2014-11-14 16:36:20