Enn*_*oji 3 erlang pattern-matching
我注意到[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 []
Run Code Online (Sandbox Code Playgroud)
sep*_*p2k 11
如果[H|T]将匹配[]带H=T=[],那么[[]]就不会从区分[]使用模式匹配.
进一步的模式[]并[H|T]不再是互斥的,所以如果你[H|T]在递归函数中意外匹配,[]基本情况在哪里,你就会导致无限递归.
另外使用[]"这个列表没有头"的符号似乎很随意,可能会让很多用户感到惊讶.