我认为 @Vijay 的答案是迄今为止最好的答案,我只是打算对其进行 Erlangify。
Erlang 中的对(cons 单元)写为[Head|Tail]
nil 写成[]
。对于头部和尾部是什么没有限制,但是如果你使用尾部链接更多的缺点细胞,你会得到一个list。如果最后的尾部是[]
然后你会得到一个正确的清单。列表有特殊的语法支持,因为正确的列表
[1|[2|[3|[]]]]
写成
[1,2,3]
以及不正确的清单
[1|[2|[3|4]]]
写成
[1,2,3|4]
所以你可以看到差异。与正确/不正确的列表进行匹配相应地很容易。所以有一个长度函数len
对于正确的列表:
len([_|T]) -> 1 + len(T);
len([]) -> 0.
我们明确匹配终止[]
。如果给定的列表不正确,则会产生错误。虽然函数last_tail
返回列表的最后一个尾部也可以处理不正确的列表:
last_tail([_|T]) -> last_tail(T);
last_tail(Tail) -> Tail. %Will match any tail
请注意,构建列表或对其进行匹配,就像您通常所做的那样[Head|Tail]
does not检查尾部是否是列表,这样处理不正确的列表就不会出现问题。尽管您可以用它们做一些很酷的事情,但很少需要不正确的列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)