В Прологе непустой список изначально представлен с помощью функтора '.'
и двух аргументов.Первый аргумент - это голова, а второй - хвост, который сам по себе является списком:
'.'(Head, Tail).
Пролог также допускает для списков альтернативный синтаксис следующим образом:
[Head | Tail]
Опять же, Tail
сам по себе является списком или может быть []
(пустой список).Термин []
представляет собой специальный атом , представляющий пустой список.Вы не можете представлять пустой список с пометкой '.'
.
Если у вас есть список атомов, a
, b
и c
, его можно записать любым из следующих способов:
'.'(a, '.'(b, '.'(c, [])))
[a,b,c,d]
[a | [b,c,d]]
[a | [b | [c,d]]]
[a | [b | [c | [d]]]]
[a | [b | [c | [d | []]]]]
Вы также можете иметь столько «передних» элементов, сколько пожелаете в голове:
[a,b | [c,d]]
[a,b,c | [d]]
[a,b,c,d | []]
Основываясь на моем описании выше, вы сможете увидетьчто это имеет смысл.
Если вы используете write_canonical
, вы можете увидеть, что является "родным" представлением Пролога:
| ?- write_canonical([a,b,c]).
'.'(a,'.'(b,'.'(c,[])))
yes
| ?- write_canonical([]).
[]
yes
| ?-
Теперь в SWI Prolog, они повторно допустили точку ('.'
) означает нечто особенное, поэтому write_canonical
скажет, что [a,b,c]
является каноническим представлением [a,b,c]
.