Логическая программа– это множество аксиом (утверждений, не требующих доказательств) и правил, задающих отношения между объектами. Вычислением логической программы является вывод следствий из программы. Основные конструкции логического программирования– термы и утверждения. Имеется три основных вида утверждений: факты, правила и вопросы.
Для обозначения факта используется запись вида «Q.»– предикат, вслед за которым ставится точка. Предикаты бывают 0-местные (без аргументов) или n- местные (с n аргументами). Предикат без аргументов обозначается одним именем. Предикат с аргументами обозначается именем, вслед за которым в скобках через запятые записываются все его аргументы. Аргумент предиката– синтаксическая конструкция, называемая термом. Определение предиката в обозначениях Бэкуса-Наура:
Терм– это либо константа, либо переменная, либо структура.
Структура– более сложное, чем константа и переменная, образование, характеризуется именем (функтором) и компонентами– составными частями структуры. Каждый компонент структуры в свою очередь является термом.
Например, библейское утверждение «Авраам родил Исаака» (иначе: объект Авраам связан с объектом Исаак отношением father[1]) в терминах языка Пролог может быть записано как факт с использованием двуместного предиката[2]:
father("Авраам", "Исаак").
По аналогии: факты, представленные в Пролог-программе одноместными предикатами:
man("Адам").
woman("Ева").
можно интерпретировать как утверждения: «Адам является мужчиной» (объект Адам обладает свойством man), «Ева является женщиной» (объект Ева обладает свойством woman), соответственно. Эти же утверждения могут быть реализованы несколько иначе:
homo_sapiens(man("Адам")).
homo_sapiens(woman("Ева")).
При этом одноместный предикат homo_sapiens подчеркивает, что объекты Адам и Ева, несмотря на очевидные различия, все-таки относятся к одному и томе же биологическому виду. В приведенном примере предикаты man и woman выступают в качестве аргумента для предиката homo_sapiens.
Конечное множество фактов образуют простейший вид Пролог-программы. Такой подход лежит в основе программирования баз данных и, в принципе, уже сейчас, используя только один вид утверждений– факты, можно написать небольшую, но достаточно эффективную программу на Прологе, описывающую фрагмент генеалогического дерева одного весьма известного российского семейства (см. рис. 1). Кроме уже рассмотренных предикатов man и woman в программу для описания родственных отношений введены предикаты child[3] и pair[4].