我注意到 [H|T] = [1].
成功但 [H|T] = [].
失败。我想这就是它的工作原理,但是设计师是否有任何理由不选择让这种模式匹配成功并导致分配 H=[]
和 T=[]
?
9> [H|T] = [1].
[1]
10> H.
1
11> T.
[]
12> [H|T] = [].
** exception error: no match of right hand side value []
最佳答案
如 [H|T]
会匹配 []
与 H=T=[]
,然后 [[]]
不会与 []
区分开来使用模式匹配。
进一步的模式 []
和 [H|T]
将不再相互排斥,所以如果你不小心匹配到 [H|T]
首先在递归函数中,其中 []
是基本情况,你会导致无限递归。
还使用 []
作为“这个列表没有头”的符号似乎很随意,可能会让很多用户感到惊讶。
关于erlang - 模式匹配的基本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065193/