Логические взаимосвязи между фактами и объектами в логических языках описываются с помощью обозначений, унаследованных из логики предикатов. Синтаксически все объекты данных и отношения представляют собой ТЕРМЫ.
Пример 1.1
«Мэри любит яблоки»
Два объекта «Мэри» и «яблоки» связаны отношением «любит».
Отношение, связывающее объекты, называется ПРЕДИКАТОМ.
Предикат «любит» связывает объекты «Мэри» и «яблоки»:
любит (Мэри, яблоки). % Факт
и «любит», и «яблоки», и «любит (Мэри, яблоки)» — все это термы.
«Бет любит то же самое, что и Мэри»
Используем местоимение «это», которое может обозначать любое имя существительное. «Это» — переменная, которая может принять ряд конкретных значений.
«Бет любит это, если Мэри любит это.»
Условная часть: «если Мэри любит это».
Следствие: «Бет любит это».
Если условие истинно, то истинно и следствие.
любит (Бет, это):- % Правило
любит (Мэри, это).
Простые объекты могут быть двух типов:
— конкретные объекты или КОНСТАНТЫ (Мэри,Бет,-1,0.21);
— ПЕРЕМЕННЫЕ (это).
По правилам Пролога константы пишутся со строчной буквы, переменные — с прописной (мери, бет, X,Y).
Все известные нам соотношения можно переписать так:
likes(mary,apples).
likes(beth,X):-
likes(mary,X).
Это практически готовая Пролог — программа.
Можно подвести итог:
Пролог — программы состоят из утверждений.
Факт является утверждением, безусловно, истинным.
Правило — утверждение, истинное при некоторых условиях.
Условная часть правила называется ТЕЛОМ, следствие (или часть вывода) — ГОЛОВОЙ правила. Если тело правила состоит из нескольких условий, они могут быть связаны конъюнкцией (логическим «И»), обозначающейся запятой «,»:
любит (джон, X):-
любит (мэри,X), % конъюнкция двух условий
любит (энн, X).
или дизъюнкцией (логическое «ИЛИ»), обозначающейся точкой с запятой «;».
Кроме того, от предикатов разрешатся брать отрицание:
Not (likes (mary, oranges)). % Мэри не любит апельсины.
ЗАПРОС или ЦЕЛЬ также является утверждением Пролог — программы.
Если ФАКТ — ПРАВИЛО С ПУСТЫМ ТЕЛОМ, ТО ЦЕЛЬ (ЗАПРОС или формулировка задачи, которую нужно решить) — ПРАВИЛО, ИМЕЮЩЕЕ ТОЛЬКО ТЕЛО.
Турбо-Пролог использует как внутренние цели, которые содержатся в программе, так и внешние. Если внутри программы не содержится цель, то система после запуска программы выдает приглашение Goal:, и пользователь вводит цель с клавиатуры. После удовлетворения внешней цели выполнение программы не завершается. Система просит ввести следующую внешнюю цель. Прекратить запросы можно, нажав при выдаче очередного приглашения ESC.
Ответ системы на запрос представляет собой множество объектов, которые удовлетворяют запросу.
Это означает, что, в ответ на внешний запрос система находит все возможные наборы значений для переменных, содержащихся в запросе.