Elixir Cons Cells

示例

Elixir中的列表是链接列表。这意味着列表中的每个项目都由一个值组成,后跟指向列表中下一个项目的指针。这在Elixir中使用cons单元实现。

Cons单元是具有“ left”和“ right”值或“ head”和“ tail”的简单数据结构。

一个|符号可以在最后一个项目之前在列表中添加谱写的(不当)名单与给定的头部和尾部。以下是一个单独的con单元格,1其头和2尾为:

[1 | 2]

列表的标准Elixir语法实际上等效于编写嵌套的cons单元链:

[1, 2, 3, 4] = [1 | [2 | [3 | [4 | []]]]]

空列表[]用作con单元格的尾部,以表示列表的末尾。

Elixir中的所有列表都等效于形式[head | tail],其中head是列表的第一项,而列表tail的其余部分减去头。

iex> [head | tail] = [1, 2, 3, 4]
[1, 2, 3, 4]
iex> head
1
iex> tail
[2, 3, 4]

使用[head | tail]表示法对于递归函数中的模式匹配很有用:

def sum([]), do: 0

def sum([head | tail]) do
  head + sum(tail)
end