我注意到[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 []
答案 0 :(得分:11)
如果[H|T]
与[]
匹配H=T=[]
,那么使用模式匹配[[]]
将无法与[]
区分开来。
此外,模式[]
和[H|T]
将不再相互排斥,因此如果您在递归函数中首先意外匹配[H|T]
,那么[]
是基本情况,你会导致无限递归。
同样使用[]
作为“此列表没有头部”的符号似乎很随意,可能会让很多用户感到惊讶。
答案 1 :(得分:0)
虽然@ sepp2k所说的是正确的,[]
不匹配[_|_]
的一个更根本的原因是它们是不同的数据类型,所以不应该匹配。它会打败模式匹配点。