Все утверждения программы на Прологе делятся на факты, правила и вопросы. Факты отражают текущее состояние предметной области и содержат конкретную информацию. Факты всегда истинны и соответствуют простым безусловным высказываниям. Они описывают истинные в предметной области отношения (истинные предикаты). Рассмотрим пример описания меню в ресторане. Объекты предметной области - это блюда, которые можно съесть в ресторане, а одним из возможных видов отношений является классификация всех блюд на закуски, вторые мясные или рыбные блюда и десерты. Меню представляет собой небольшую базу знаний, которая записывается в виде последовательности фактов следующим образом:
/* МЕНЮ */
/* Определение отношения закуска */
'закуска'('артишоки_в_белом_соусе').
'закуска'('трюфели_в_шампанском').
'закуска'('салат_с_яйцом').
/* Определение отношения мясо */
'мясо'('говяжье_жаркое').
'мясо'('цыпленок_в_липовом_цвете').
/* Определение отношения рыба */
'рыба'('окунь_во_фритюре').
'рыба'('фаршированный_судак').
/* Определение отношения десерт */
'десерт'('грушевое_мороженое').
'десерт'('земляника_со_взбитыми_сливками').
'десерт'('дыня_сюрприз').
Эти факты вводят одновременно объекты и их классификацию (отношения). Например, факт 'закуска'('салат_с_яйцом') показывает, что салат с яйцом является закуской.
Синтаксически правильно записанный факт имеет следующую структуру предиката:
где в списке аргументов перечисляются имена объектов (не более 255), связанных данным отношением. Аргументы в списке отделяются друг от друга запятыми, в некоторых случаях могут отсутствовать. Если аргумент представляет собой имя конкретного объекта (свойства) или число, то он является константой Пролога.
Определяя с помощью фактов отношения между объектами, необходимо учитывать порядок, в котором перечисляются их имена внутри круглых скобок. Выбрав один раз какой-либо порядок, вы должны везде следовать ему и далее. Например, факт
'является_отцом'('Петр','Иван') означает, что Петр является отцом Ивану, а факт 'является_отцом'('Иван','Петр') говорит уже совсем о другом, а именно, что Иван является отцом Петра.
Одно и то же утверждение, записанное в виде факта, может по-разному интерпретироваться. Только автор программы определяет истинную интерпретацию имен объектов и порядок следования аргументов, и им он должен следовать в процессе написания всей программы, отражая в комментариях смысл записанных им высказываний. Комментарий - это текст, заключенный между символами /* ... */.
Примеры:
'нравится'('Андрей','Ольга'). /* Андрею нравится Ольга */
'часть_объекта'('спица','колесо'). /* Спица является частью колеса */
|