с одной стороны, это фильтр,
goal
show
на экран будет выведено:
Группа-261 Студент-ПЕТРОВ П.Р. Оценка-5
Группа-262 Студент-ЖИГАРЕВ С.И. Оценка-3
Таким образом, сравнение 7="Программирование ", выполняет двоякую роль: с одной стороны, это фильтр, который не допускает выполнения предиката write(...) при неуспешном сравнении, а с другой - вызывает из-за неуспешного сравнения откат до ближайшей альтернативы. При этом если бы не было предиката fail, было бы получено только первое решение - fail обеспечивает перебор всех альтернатив. Предикат nl является стандартным, он выполняет переход на следующую строку при выводе информации на экран.
В Турбо-Прологе имеются средства, с помощью которых можно заблокировать поиск с возвратом. Для этих целей служит специальный предикат, который называется отсечение (cut) и обозначается восклицательным знаком. Для демонстрации его использования в нашем примере добавим предикат отсечения в правило show:
show:-kurs_22(gr(X,student(Y,Z,K))),
Z="Программирование",!,
write(Tpynna-",X," Студент-", Y ," Оценка-",К),
nl,
fail.
Тогда для внутреннего запроса:
goal
show
315
на экране будет выведена информация:
Группа-261 Студент-ПЕТРОВ П.Р. Оценка-5
В данном варианте после успешного сравнения Z="Программирование " предикат ! прекращает условия поиска после формирования условия "неуспех" предикатом fail.
Таким образом, использование в правиле предиката отсечения означает, что в дальнейшем не будет производиться перебор других аргументов предикатов, использованных в этом правиле до знака отсечения после формирования признака неуспеха любым из предикатов, стоящим в правиле правее предиката !. Но это не означает, что не будут перебираться альтернативные варианты по неуспеху для других предикатов, стоящих за !.
Преобразуем предикат show к виду:
show:-kurs_22(gr(X,student(Y, Z, K))),
Z="Программирование ", ! , К=3,
write(" Группа -", X ," Студент-", Y, " Оценка-",К),
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий