我正在尝试创建一个返回列表最后一个元素的函数。 然而这里有些奇怪。
last([X,[]]) -> X;
last([_X|Xs]) -> last(Xs).
这将返回无匹配子句错误。但是,如果我将第一行更改为 last([X|[]]) -> X;
它将正常工作。我认为这两行的意思是相同的,但显然有不同的结果。我在这里错过了一些重要的事情吗?
最佳答案
逗号分隔列表元素,而|
分隔列表的头部和尾部。 [X,[]]
是一个由两个元素组成的列表,即 X
和空列表 []
。但 [X|[]]
是一个包含一个元素 X
的列表,尾部为空。
顺便说一句,您可能只使用 lists:last/1
而不是编写自己的函数。
关于erlang - 逗号和|之间的区别在二郎中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335183/