Clauses
towns([«Петербург»,«Псков»,«Новгород»,«Ладога»,«Ямбург»]).
Реализация такой программы возможна при использовании, например, следующих внешних целей: towns(All). или towns([X,_,_,Y,_]).
Список не имеет никаких предикатов для своей обработки. Для снятия этого неудобства введена единственная операция над элементами списка, называемая МЕТОДОМ СПИСКА НА ГОЛОВУ И ХВОСТ. При этом непустой список рассматривается как структура, состоящая из двух частей: [Head|Tail].
Переменная Head (голова списка) это его первый элемент или фиксированное количество элементов, отделенных символом "|" (вертикальная черта). А переменная Tail (хвост) это список оставшихся элементов списка.
В таблице 4.1 приведены примеры деления списка на голову и хвост. При этом видно, что хвост списка - всегда список, а Таблица 4.1 голова - элемент списка, и разделение списка на голову и хвост не зависит от длины списка. Последовательное применение этого метода позволяет легко осуществлять различные операции над списками и написать практически любую программу по обработке любого мыслимого списка.
Как осуществляется сопоставление списков? Варианты результатов сопоставления представлены в таблице 4.2. Таблица 4.2
Пример 4.2 показывает использование метода разделения списка для осуществления доступа к его элементам. В этом примере используется рекурсивное правило для реализации доступа к элементам списка. Если ввести цель
towns([«Петербург»,«Псков»,«Новгород»,«Ладога»,«Ямбург»]).
то в результате будет выведен на экран монитора список городов по одному на каждой строке.
/*Пример 4.2.*/
|