逗号和|的区别在二郎

The difference between comma and | in erlang

我正在尝试创建一个 returns 列表最后一个元素的函数。 不过这里有点奇怪。

last([X,[]]) -> X;
last([_X|Xs]) -> last(Xs).

这 returns 一个不匹配的子句错误。但是,如果我将第一行更改为 last([X|[]]) -> X;,它将正常工作。我认为两条线的意思相同,但显然有不同的结果。我在这里错过了一些重要的东西吗?

逗号分隔列表元素,而 | 分隔列表的头部和尾部。 [X,[]] 是两个元素的列表,X 和空列表 []。但是 [X|[]] 是一个包含一个元素的列表,X,尾部为空。

顺便说一句,您可能只使用 lists:last/1 而不是编写自己的函数。