erlang - 逗号和|之间的区别在二郎中

标签 erlang pattern-matching

我正在尝试创建一个返回列表最后一个元素的函数。 然而这里有些奇怪。

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/

相关文章:

mysql - Erlang 和 SQL 注入(inject)攻击

erlang - Erlang 中的错误未定义函数

python - 在 Python 中使用 Stanford Tregex

java - 在正则表达式中查找第二次出现的模式

regex - 在Powershell -match中,$ Match是否可以重用?

scala:在执行输入转换时从类型 T 到类型 T 的通用函数

erlang - 如何复制 Erlang 有向图?

serialization - term_to_binary 的字符串版本

Erlang Dialyzer 整数范围

数组中用于模式匹配的 JavaScript 占位符