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