logo search
Учебник_Final

3.2. Основные разделы программы

Описание данных присутствует в двух основных разделах Пролог-программы, один из которых называется predicates (отношения), а другой – clauses (утверждения). В разделе predicates описываются предикаты, используемые в БД, с описанием их типа. Для определения основной цели программы служит ключевое слово goal. В раздел clauses заносятся факты и правила, известные априорно. О содержимом этого раздела можно говорить как о данных, необходимых для работы программы.

Пример.

predicates

cat (integer)

food (symbol)

goal

some (goals).

clauses

cat (10).

food (whiskas).

Заполнение разделов программы

Такие разделы Пролог-программы как trace, project (название проекта) и include (внешний исходный файл) заполняется по желанию.

Раздел domains, объявляющий новые типы области данных, может быть заполнен по желанию или необходимости.

Пример.

domains

man = symbol

time = symbol

Раздел database объявляет предикаты, которые по желанию можно добавлять или удалять.

Пример.

database

work (man, time)

Раздел global predicates или predicates объявляет области определения каждого предиката или глобального предиката в обязательном порядке.

Пример.

predicates

know (man, man)

work (man, time)

clauses /* текст программы */

work ("Петр", "днем").

work ("Иван", "днем").

know (A, B) :- work (X, S), work (Y, S), X < > Y.

goal

know (A, B). /* цель может быть задана по желанию */

Предикаты в Пролог-программе могут быть системными и пользовательскими, т.е. созданными разработчиком программы.

Логические термы

Совокупность синтаксических структур в Пролог-программе называется логическими термами. Термы могут иметь простую или сложную структуры.

Константы в Пролог-программе могут быть числом или атомом. Атом представляет собой последовательность строчных и прописных символов, цифр и специальных знаков, которая обязательно начинается со строчной буквы. Если атом в программе начинается с прописной буквы, то его заключают в апострофы (двойные кавычки).

Пример.

name (man, "Петр")

Основными называются термы, не содержащие переменных, т.е. факты. Термы, содержащие переменные называются неосновными.

Сложный терм является в Пролог-программе или функтором, или оператором. Определение сложного терма в программе содержит имя, представляющее собой атом, и совокупность аргументов, которые в свою очередь также могут быть простыми и сложными термами.

Переменные в Пролог-программе

Переменные в Пролог-программе являются не местом в памяти, а реальным объектом. Место действия одной переменной – одна резольвента. При осуществлении механизма возврата значения всех переменных в резольвенте, через которые осуществляется возврат, очищаются.

Переменная в Пролог-программе представляет собой последовательность знаков подчеркивания, строчных и прописных букв, которая всегда начинается с прописной буквы или со знака подчеркивания.

Пример.

domains /* раздел данных */

тип фигуры = symbol

выражение для площади = string

predicates

площадь (тип фигуры, выражение для площади)

фигура (тип фигуры, выражение для площади)

goal

площадь (круг, Z).

clauses

площадь (X, Y) :- фигура (X, Y), write ("X=", X, "Y=", Y).

фигура (квадрат, "сторона * сторона").

фигура (круг, "pi * радиус * радиус").

фигура (треугольник, "1/2 * основание * высота").

фигура ( __ , "неизвестно").

Наличие символа «__» означает использование фиктивной переменной. В рассмотренном примере с ее помощью реализован квантор общности.

В разделе данных domains объявлены типы данных пользователя («тип фигуры» и «выражение для площади»), а также указано, что «тип фигуры» эквивалентен стандартному символьному типу (symbol), а тип «выражение для площади» – стандартному строковому типу (string).