- •«Рекурсивно-логическое программирование»
- •Содержание
- •1 Введение в язык Пролог
- •2 Логические основы Пролога
- •3 Основные понятия Пролога
- •4 Рекурсия
- •5 Структура программы на Турбо Прологе
- •6 Управление выполнением программы на Прологе
- •7 Списки
- •8 Сортировка списков
- •9 Множества и деревья
- •10 Строки
- •11 Файлы
- •12 Внутренние (динамические) базы данных
- •13 Пролог и искусственный интеллект
5 Структура программы на Турбо Прологе
Программа на Турбо Прологе состоит из семи разделов:
директивы компилятора;
CONSTANTS - раздел описания констант;
DOMAINS - раздел описания доменов;
DATABASE - раздел описания предикатов внутренней базы данных;
PREDICATES - раздел описания предикатов;
CLAUSES - раздел описания предложений;
GOAL - раздел описания внутренней цели.
Директивы компилятора.
В начале программы можно расположить одну или несколько директив компилятора, которые дают компилятору дополнительные инструкции по обработке программы.
Директива trace применяется при отладке программы для трассировки. Трассировка предоставляет пользователю наблюдать за ходом выполнения программы. Во время исполнения программы при включенной трассировке в специальном окне трассировки будет отображаться следующая информация:
после слова "CALL" будет указано имя выполняемого предиката (текущая подцель) и его параметры; *
после слова "FAIL" будет выводиться имя текущей подцели, которая не была достигнута;
после слова "RETURN" будет выводиться результат вычисления текущей подцели, в случае успеха. При этом если у подцели есть еще альтернативы, к которым возможен возврат, то перед именем предиката высвечивается звездочка ("*");
слово "REDO" перед именем предиката указывает на то, что произошел возврат и происходит вычисление альтернативного решения.
DOMAINS /* раздел описания доменов */
s=string /* вводим синоним для строкового типа данных */
PREDICATES /* раздел описания предикатов */
mother(s,s) /* предикат мама будет иметь два аргумента
строкового типа */
grandmother(s,s) /* то же имеет место и для предиката
бабушка */
CLAUSES /* раздел описания предложений */
mother("Наташа","Даша"). /* "Наташа" и "Даша" связаны
отношением мама */
mother("Даша","Маша"). /* "Даша" и "Маша" также
принадлежат отношению мама */
grandmother(X,Y):- /* X является бабушкой Y, если
найдется такой Z, что */
mother(X,Z), /* X является мамой Z, а */
mother(Z,Y). /* Z является мамой Y */
Предикаты ввода-вывода.
Турбо Пролог имеет отдельные предикаты для чтения данных с клавиатуры или из файла.
readln – считывает строку
readint – считывает целое число
readchar – считывает символ
readreal – считывает вещественное число
readterm – считывает терм
write – запись в устройство
writef – форматный вывод данных
nl – переход на следующую строку
upper_lower – выполняет преобразования между регистрами
str_int – преобразует строку в целое число
char_int – переход от символа к ASCII-коду
Операции: +,-,*,/,div,mod, =, >, <, <=, >=, ln, log, sqrt, abs, exp, sin, cos, tan, arctan. Углы в радианах.
round - округление
true – всегда истинен
fail – всегда терпит неудачу, цель никогда не будет достигнута. Fail используется для организации поиска с возвратом. Размещение подцели в теле правила после предиката Fail бессмысленно, поскольку этот предикат всегда терпит неудачу – цель никогда не будет достигнута.
free – истинен, если аргумент - свободная переменная.
bound – истинен, если аргумент - связанная переменная, иначе ложен.
% - однострочный комментарий.
