- •27.Управление программой. Внутренние подпрограммы унификации Пролога.
- •28.Структура программ на Прологе. Предикаты и утверждения.
- •29.Арифметика в Прологе.
- •30.Программирование повторяющихся операций. Повторение и откат.
- •31.Методы повторения. Методы организации рекурсии.
- •32.Списки в Прологе. Применение списков в программе.
- •33.Использование метода с разделением списка на голову и хвост. Компоновка данных в список.
- •34.Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
- •35.Создание символьных префиксов. Преобразование строк в список символов.
- •36.Специальные строки Пролога.
- •37.Формирование атомов из строк.
- •38.Преобразование строк в списки атомов с функторами.
- •39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
29.Арифметика в Прологе.
Турбо-Пролог располагает двумя числовыми типами доменов: целыми и действительными числами. Четыре основные арифметические операции - это сложение, вычитание, умножение и деление. Для их реализации в Турбо-Прологе используются предикаты.
predicates
add(integer,integer).
fsubstruct(real,real).
goal
write(" Results"), nl, nl,
add(44,23),
fsubstruct(12.65,7.3),
write(" All done, bye!").
clauses
add(X,Y):-
Z = X + Y, write("Sum = ", nl.
fsubstruct(P,Q):-
R = P - Q, write("Fdiff = ",R), nl.
30.Программирование повторяющихся операций. Повторение и откат.
Откат - это механизм, который Турбо-Пролог использует для нахождения дополнительных фактов и правил, необходимых при вычислении цели, если текущая попытка вычислить цель оказалась неудачной.
В программах на Турбо-Прологе повторяющиеся операции обычно выполняются при помощи правил, которые используют откат и рекурсию.
Вводятся четыре важных метода отката и рекурсии: метод отката после неудачи, метод отсечения и отката, правило повтора, определяемое пользователем, и обобщенное рекурсивное правило.
Правила повтора и рекурсии должны содержать средства управления их выполнением с тем, чтобы их использование было удобными. Встроенные предикаты Турбо-Пролога fail и cut используются для управления откатами, а условия завершения используются для управления рекурсией.
Вид правила, выполняющего повторение, следующий:
repetitive_rule :- /* правило повторения */
<предикаты и правила>,
fail. /* неудача */
Вид правила, выполняющего рекурсию, следующий:
recursive_rule :- /* правило рекурсии */
<предикаты и правила>,
recursive_rule.
Обычно цель программы на Турбо-Прологе содержит одну или нескоолько подцелей, которые могут быть либо фактами, либо правилами. Факт вычисляется немедленно. Результат будет либо успешным, либо неуспешным в зависимости от того, сопоставим ли факт в программе с фактом в правиле. Правило, являясь связкой
подправил, вычисляется путем вычисления подправил. Если подправило не может быть успешно вычислено, то Турбо-Пролог выполняет откат, что бы найти другие возможные пути вычисления этого подправила.
Фиксируется одно значение предиката и сравнивается поэлементно с другими предикатами. Если совпадений не обнаружено производится откат, переходим на другой предикат и начинаем поиск уже по нему. Результаты даже неудавшихся операций сохраняются.
plays(tom,football) /* Том играет в американский */
/* футбол */
plays(john,soccer) /* Джон играет в европейский */
/* футбол */
plays(john,volleyball) /* Джон играет в волейбол */
plays(tom,basketball) /* Том играет в баскетбол */
plays(tom,volleyball) /* Том играет в волейбол */
plays(john,baseball) /* Джон играет в бейсбол */
Утверждение цели следующее:
plays(john,G),plays(tom,G).
Откат является автоматическим инициируемым системой процессом, если не используются средства управления им. Для управления процессом отката в Турбо-Прологе предусмотрены два встроенных предиката fail (неудача) и cut (отсечение).
Во время выполнения программы Турбо-Пролог создает необходимые внутренние структуры данных (такие как списки и деревья) для выполнения обработки программы. Эта обработка включает такие процессы как поиск, сопоставление с образцом, создание экземпляра, означивание и освобождение переменных, откаты.
