[英]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.