关于模式匹配的基本问题

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]在递归函数中意外匹配,[]基本情况在哪里,你就会导致无限递归.

另外使用[]"这个列表没有头"的符号似乎很随意,可能会让很多用户感到惊讶.