逗号和|的区别在二郎

Posted

技术标签:

【中文标题】逗号和|的区别在二郎【英文标题】:The difference between comma and | in erlang 【发布时间】:2016-01-24 22:17:21 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

感谢您的建议。我这样做是因为我认为自己编写原始函数会更好地训练我的技能。另外,请问last([X]) -> X呢?它的工作方式与last[X|[]] 相同吗? 是的。如果您进入 Erlang shell 并输入以下内容,您可以验证这一点:[1] = [1|[]].(这里我选择使用值1,但您可以使用任何值,只要它在= 的两边都相同) .这就像一个断言,声明[1][1|[]] 匹配。结果表明这是真的;如果它们不匹配,我们将得到 badmatch 异常。 @user2129773 关于[1] = [1|[]],您可能会发现一些有关“缺点列表”概念的背景信息很有用。具备一些背景知识后,您将开始在各处以各种语言的各种语法识别这些结构:mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html

以上是关于逗号和|的区别在二郎的主要内容,如果未能解决你的问题,请参考以下文章

“,”和“;”有啥区别?

使用交叉连接和在两个表之间放置逗号有啥区别?

请问VB中PRINT语句后面用分号和逗号有啥区别?

Cypher 查询中的多个 MATCH 子句和逗号有啥区别?

PHP - 逗号和点号的区别

逗号分隔的连接和MySQL中的语法连接有啥区别? [复制]