Программирование на языке Пролог для искусственного интеллекта
Шрифт:
• проверка, является ли некоторый объект элементом списка, что соответствует проверке объекта на принадлежность множеству;
• конкатенация (сцепление) двух списков, что соответствует объединению множеств;
• добавление нового объекта в список или удаление некоторого объекта из него.
В оставшейся части раздела мы покажем программы, реализующие эти и некоторые другие операции над списками.
3.2.1. Принадлежность к списку
Мы представим отношение принадлежности как
где X — объект,
и, наоборот, не верно, что
но
истинно. Составление программы для отношения принадлежности может быть основано на следующих соображениях:
(1) X есть голова L, либо
(2) X принадлежит хвосту L.
Это можно записать в виде двух предложений, первое из которых есть простой факт, а второе — правило:
3.2.2. Сцепление (конкатенация)
Для сцепления списков мы определим отношение
Здесь L1 и L2 — два списка, a L3 — список, получаемый при их сцеплении. Например,
истинно, а
ложно. Определение отношения
(1) Если первый аргумент пуст, тогда второй и третий аргументы представляют собой один и тот же список (назовем его L), что выражается в виде следующего прологовского факта:
(2) Если первый аргумент отношения
На рис. 3.2 показано, как производится сцепление списка
Рис. 3.2. Конкатенация списков.
Составленную программу можно теперь использовать для сцепления заданных списков, например:
Хотя программа для
Список
Нашу программу можно также применить для поиска в списке комбинации элементов, отвечающей некоторому условию, задаваемому в виде шаблона или образца. Например, можно найти все месяцы, предшествующие данному, и все месяцы, следующие за ним, сформулировав такую цель:
Далее мы сможем найти месяц, непосредственно предшествующий маю, и месяц, непосредственно следующий за ним, задав вопрос:
Более того, мы сможем, например, удалить из некоторого списка L1 все, что следует за тремя последовательными вхождениями элемента z в L1 вместе с этими тремя z. Например, это можно сделать так:
Мы уже запрограммировали отношение принадлежности. Однако, используя
Рис. 3.3. Процедура