Основы современных компьютерных технологий


Управление вычислениями - часть 5


nl,

fail.

В этом случае не будет получено результатов, так как после поиска первого решения для Z="Программирование " переменная К=5 и сравнение 5#3 сформирует неуспех, который не приведет к возврату для поиска следующей альтернативы для предиката kurs_22(gr(X,student( Y.Z.K")), так как условия возврата уже сброшены отсечением.

Введем в правило еще один предикат kurs_22(gr(>A,student(S,C,D))), который зависит от других переменных - это принципиально. Предикат show будет следующим:

show:-kurs_22(gr(X,student(Y,Z, K))),

Z="Программирование",!,

kurs_22(gr(A,student(B,C,D)),D=3,B=Z,

write(" Группа-", А, " Студент-", В," Оценка-",D),

nl,

fail.

После внутреннего запроса show на экран будет выведена информация в виде:

Группа-262 Студент-ЖИГАРЕВ С.И. Оценка-3

Отметим, что часть правила после отсечения ! осуществляет полный перебор всех фактов программы, начиная с первого, с помощью фильтра D=3, B=Z, а при его выполнении - с помощью fail.

Другими словами, отсечение ограничивает распространение аргументов для подбора новых значений возврата (бэктрекинга) из-за неудачи. Отсечение применяется также для ускорения вычислений путем отбрасывания избыточных ветвей вычислений.

Замечания:

316

  • Ранее было показано отличие выполнения внутреннего (описанного в разделе goal) и внешнего (вводимого через приглашение системы в диалоговом окне) запросов. Теперь мы можем сказать, что перебор всех альтернативных решений для внешнего запроса обеспечивается автоматическим присоединением к нему системой Турбо-Пролог стандартного предиката fail.
  • Наличие в программе раздела goal позволяет после компиляции логической программы получить загрузочный модуль программы (файл типа .ехе) и использовать его независимо от среды программирования Турбо- Пролог.

317

312 :: 313 :: 314 :: 315 :: 316 :: 317 :: Содержание




Начало  Назад  Вперед