Я не уверен, будет ли это полезно, но ...
A cons cell описывает пару, первый элемент которых является каким-то термином, а второйуказатель на другую ячейку cons (или нуль, если в конце списка).Так что, если вы позволите мне использовать «->» в качестве символа указателя, простой cons-ячейкой, представляющей список из одного элемента, может быть
[1, -> null] = the list [1].
[2, -> [1,-> null]] = the list [2,1], etc.
Список можно рассматривать как связанный списокcons-ячейки, где 2-й элемент в ячейке Cons - указатель на следующую ссылку.
Оператор Cons создает новый список, создавая ячейку Cons, первый элемент которой является новым элементом списка, а второй -является указателем на первую ячейку Cons исходного списка.Первым элементом является голова, а вторым элементом (хвостом) является указатель на следующую ячейку 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].