Учебник Пролога: Проблема изложена в виде правил
Прологовая программа состоит в основном из фактов и правил. Правила - это способ выразить то, что вы хотите сделать с фактами, которые мы зафиксировали.
Например, мы знаем, в каких городах живет список людей...
habite('Julia', 'New York').
habite('Tom', 'San Francisco').
habite('Naomi', 'New York').
habite('Harrison', 'San Francisco').
Джулия живет в Нью-Йорке, Том в Сан-Франциско и т. Д.
Один из способов использовать эти знания может найти, какие люди живут в одном городе. Для этого мы определяем правило.
voisin(X,Y) :- habite(X, Ville), habite(Y, Ville).
Это гласит:
- X и Y являются соседями, если
- X живет в таком городе
- Живёт там в таком городе
- де-факто переменная Город имеет одно и то же содержимое в обоих объявлениях
Это даст нам Джулию соседа Ноами, Тома соседа Харрисона. Но это даст нам и соседку Юлию, потому что пролог не предполагает от себя, что X и Y - два разных человека. поэтому необходимо добавить еще одно условие: переменные X и Y имеют разные значения.
voisin(X,Y) :- habite(X, Ville), habite(Y, Ville), X \= Y.
У нас будет следующий результат.
Julia voisin de Naomi
Tom voisin de Harrison
Naomi voisin de Julia
Harrison voisin de Tom
Для просмотра этих результатов мы добавим небольшую программу. Программа - это правило, содержащее инструкции. Мы используем три инструкции из стандартной библиотеки:
- write : отображает строку символа.
- forall - находит список всех фактов, удовлетворяющих условию в качестве первого параметра, и для каждого элемента этого списка выполняет инструкцию, данную во втором параметре.
- формат - более сложная форма записи, отображающая текст с заданным форматом. Похож на printf de C .
Итак, вот программа:
program :-
write('Voisins...\n'),
forall(voisin(X,Y), format("~a voisin de ~a ~n", [X, Y])),
write('Fin').
Поскольку «program» - это правило, для его выполнения ты вводишь следующую строку в консоли prolog:
program.
Будет показано:
Voisins... Julia voisin de Naomi
Tom voisin de Harrison
Naomi voisin de Julia
Harrison voisin de Tom Fin
Также можно напрямую вызвать правило «сосед»:
voisin('Julia', 'Naomi').
который вернется «yes».
Зная сейчас, как констатировать факты и правила, у тебя есть все необходимое для решения сложных проблем благодаря Прологу...