有人可以解释什么是“不当列表”吗?
我认为@Vijay的答案是迄今为止最好的答案,我只想对它进行错误描述。
Erlang中的对(约束单元)写为[Head|Tail],nil写为[]。头和尾是什么没有限制,但是如果使用尾链接更多的cons单元,则会得到一个列表。如果最终的尾巴[],那么你得到一个正确的名单。列表中有特殊的语法支持
[1|[2|[3|[]]]]被写成
[1|[2|[3|[]]]]
[1,2,3]和不适当的清单
[1,2,3]
[1|[2|[3|4]]]被写成
[1|[2|[3|4]]]
[1,2,3|4]这样您就可以看到区别。与正确/不正确的列表进行匹配相对容易。因此,一个长度函数len用于适当的列表:
[1,2,3|4]
len([_|T]) -> 1 + len(T);len([]) -> 0.
len([_|T]) -> 1 + len(T);
len([]) -> 0.
我们明确匹配终止的位置[]。如果给出的列表不正确,将产生错误。虽然last_tail返回列表最后尾的函数也可以处理不正确的列表:
last_tail([_|T]) -> last_tail(T);last_tail(Tail) -> Tail. %Will match any tail
last_tail([_|T]) -> last_tail(T);
last_tail(Tail) -> Tail. %Will match any tail
需要注意的是建立一个列表,或匹配反对它,你通常用做[Head|Tail]并不能检查,如果尾巴名单所以在处理不当的名单没有问题。很少需要不正确的列表,尽管您可以使用它们来做一些很酷的事情。