繁体   English   中英

Cons运算符“|”在Erlang中

[英]Cons Operator “|” In Erlang

在阅读LearnYouSomeErlang时,我发现cons运算符用于获取列表的第一个元素。 关于它是如何工作的我有点困惑,因为在书的前面他提到cons运算符用于向列表中添加元素。

此函数返回List的第一个元素。

head([H|_]) -> H.

在此页面中找到http://learnyousomeerlang.com/syntax-in-functions

有人可以解释这在返回列表的第一个元素时是如何工作的。

cons运算符可用于模式匹配列表。 因此,列表可以与[H|T]模式匹配,它解构列表, H是列表的第一个元素, T是列表的其余项。

因此,cons运算符既可用于模式匹配,也可用于构建列表。 例如,构造是X = [1|[2,3]]

我不确定这是否有用,但......

cons单元描述了一对,其中第一个元素是某种类的术语,第二个元素是指向另一个cons单元格的指针(如果在列表的末尾则为null)。 所以,如果你让我使用' - >'作为指针符号,表示一个元素列表的简单cons单元可以是,

[1, -> null] = the list [1]. 

[2, -> [1,-> null]] = the list [2,1], etc.

列表可以被认为是cons单元的链表,其中Cons单元的第二个元素是指向下一个链接的指针。

Cons运算符通过创建Cons单元格来创建新列表,其中第一个元素是新的列表元素,第二个元素是指向原始列表的第一个Cons单元格的指针。 第一个元素是Head,第二个元素(Tail)是指向 'chain'中下一个Cons单元格指针 在Erlang中,上面的内容可以写成

[2 | [1 | []]]

列表[2,1]。 作为简写,[1 | []]写为[1],所以

 [2|[1|[]]] = [2|[1]]=[2,1]

现在,如果我的列表是[1,2,3],我可以将其表示为其尾部与其尾部相似,

[1|[2,3] 

因此,因为Erlang很棒,所以这个模式可用于匹配,如下所示:“我有一个列表,[1,2,3]可以被描述为一个Cons-ed Hd和一个Tail(一个指向Hd的指针)列表的其余部分)。所以

[Hd|Tail] = [1,2,3] 

Hd = 1 

Tail = [2,->[3,->null]] = [2|[3|[]]] = [2|[3]] = [2,3].

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM