Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пролог бомбы часть 1 (27-39).doc
Скачиваний:
4
Добавлен:
26.09.2019
Размер:
120.32 Кб
Скачать

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 (отсечение).

Во время выполнения программы Турбо-Пролог создает необходимые внутренние структуры данных (такие как списки и деревья) для выполнения обработки программы. Эта обработка включает такие процессы как поиск, сопоставление с образцом, создание экземпляра, означивание и освобождение переменных, откаты.