Константы: целые и вещественные числа, атомы (любые цепочки символов, не начинающиеся с заглавных букв или любые цепочки символов в кавычках).
Целые числа представляются последовательностями цифр с возможным знаком «+» или «-».
Вещественные числа представляются в двух форматах:
1) В виде десятичной дроби, например: 10.12, -0.25, +35.1234. В некоторых случаях целые числа могут интерпретироваться как десятичные дроби – это зависит от контекста, в котором находится число.
2) В виде мантиссы и десятичного порядка: <десятичная дробь>Е<целое>, например: 1.012E1, -0.95Е+3, 125Е-2.
Как видно из примеров, перед вещественными числами могут находиться знаки «+» или «-»
Переменные: цепочки букв, цифр и знака подчеркивания («_»), начинающиеся с заглавной буквы или знака подчеркивания. Особая переменная – анонимная. Она представляется знаком подчеркивания.
Сложный терм это:
1) структура, состоящая из атома-предиката (илифунктора)и компонент, т.е. термов в скобках через запятую; при этом компоненты сами могут являться сложными термами; например информация о книгах библиотеки может состоять из следующих данных: автор, название, издательство, год выпуска – книга(“Л.Н. Толстой”, “Война и мир”, “Художественная литература”, “2002”).
2) список, т.е. упорядоченный набор связанных между собой термов; имеется возможность работать как целиком со списком, так и с отдельными входящими в него термами.
Константы и структуры представляют объекты предметной области, а списки – упорядоченные наборы объектов. Роль структур заключается в группировке некоторых объектов, представляющих составной объект.
База знаний, описывающая предметную область, задается фактами и правилами.
Факты – это отдельные предикаты, состоящие из имени предиката и, возможно, термов, представляющих его аргументы.
Правила имеют вид:
p1( … ) : – p2( … ), … , pn( … ), n ≥ 2,
где pi – предикаты.
Приведем примеры простых баз знаний, пояснив кроме синтаксиса также их семантику.
Фрагмент словаря синонимов и антонимов может быть представлен следующей базой знаний:
synonym("храбрый","отважный").
synonym("храбрый","бесстрашный").
synonym("современный","новый").
synonym("редкий","неупотребительный").
antonym("храбрый","трусливый").
antonym("честный","бесчестный").
antonym("современный","старый").
antonym("редкий","частый").
Фрагмент описания предметной области «Дифференцирование», который представляет правило дифференцирования суммы, может быть представлен следующими фактом и правилом:
Отметим, что в первом из этих примеров мы использовали только факты. Все они представляют два предиката, для имен которых использованы функторы synonym и antonym. Вы можете без труда заметить, что их компоненты подобраны так, что они действительно являются, соответственно, синонимами и антонимами друг друга в общепринятом понимании этих терминов. Во втором примере имеется факт diff( Х,Х,1). Он отражает простейшее правило дифференцирования, согласно которому производная по X функции F(X) = X равна 1. Правило второго примера интерпретируется так: если производная по X функции U равна A, а производная по X функции V равна B, то производная по X суммы U+V равна A+B.
Вопросы представляются в виде одного или нескольких предикатов, называемых целями:
?- p1( … ), p2( … ), … , pn( … ), n ≥ 1.
Список целей, заданный этим вопросом, таков:
p1( … ), p2( … ), … , pn( … ).
Если вопрос состоит из одного предиката, то он называется простым, в противном случае – составным. Активная цель – это первая цель списка (в нашем примере p1). После осуществления логического вывода активной цели, она исключается из списка, который в случае нашего примера примет вид:
p2( … ), … , pn( … ).
В этом случае говорят, что цель доказана или достигнута и активной становится цель p2. Работа заканчивается либо после достижения последней цели списка pn (в случае наличия решений), либо при возникновении тупиковой ситуации, когда вывод какой-нибудь активной цели оказывается невозможным.
Программы на Прологе состоят из двух частей – описания предметной области и вопроса:
1) Факты и правила, описывающие предметную область.
2) Вопрос.
Например, приписав вопрос
?- synonym("храбрый",X), antonym("храбрый", Y)
к базе знаний первого примера, получим программу.
Ответы на вопросы пользователей формируются в процессе выполнения программ и в разных версиях языка представляются по-разному. Мы примем следующий вариант. Если ответ должен быть положительным или отрицательным, то он представляется в форме Yes и Noсоответственно. Если же требуется указать выполненные в процессе логического вывода подстановки, вместо переменных, входящих в цели, то они перечисляются в ответе, после чего указывается число найденных решений.
Например, ответ на приведенный выше вопрос выглядит так: