Список в Прологе может определяться через функтор "." (точка).
.(a,[ ]) это форма записи списка.
Список [a,b,c] может быть представлен структурой
.(а,.(b,.(c,[ ])))
или в виде дерева, или диаграммой "виноградная лоза"
Для вложенных списков [a,b,[c,d]]
- на верхнем уровне три элемента - на втором уровне два элемента. |
Главной операцией при работе со списками является расщепление списка на голову и хвост.
В Прологе имеется специальная форма представления списка, называемая cons -формой записи:
[Head|Tail] или [H|T] или [a|[ ]] = [а]
При конкретизации формы списка H сопоставляется с головой списка, а Т - с хвостом.
Например,
р([a,b,c]). |
?-p([X|Y]). yes X=a Y=[b,c] | ||
Таким образом, выделяются одновременно голова списка и хвост.
Шаблон (образец) списка - это форма описания множества (семейства) списков, обладающих определенными свойствами.
Например:
Шаблон списка [X|Y] описывает любой список, состоящий не менее чем из одного элемента.
Шаблон [X,Y|Z] - список, состоящий не менее чем из двух элементов.
Шаблон [b|Z] - список, первым элементом которого является b.
Шаблон [Y,X,Z] - список из трех элементов.
Шаблоны списка используются при описании процедур работы со списками.
Определим отношение replace_first, которое заменяет первый элемент списка новым.
?-replace_first([a,b,с],w,X). X=[w,b,c] - результат | ||||
?-replace_first([_|T],A,[a,b,c]). A = a - результат Т=[b,c] - результат. | ||||