Лабораторная работа
Prolog. Использование отсечения в пролог-программах
Категория: | Лабораторная работа |
Дисциплина: | Функциональное и логическое программирование |
Город: | Беларусь, Минск |
Учебное заведение: | БНТУ, ФИТР |
Тег: | #PROLOG |
Стоимость работы: | 6 руб. |
Оценка: | 10 |
Объем страниц: | 5 |
Год сдачи: | 2021 |
Дата публикации: | 24.12.2021 |
Фрагменты для ознакомления
Отчет по лабораторной работе № 5
дисциплина: «Функциональное и логическое программирование»
Использование отсечения в пролог-программах
Цель работы: приобретение практических навыков использования отсечения в программах на Visual Prolog.
Постановка задачи:
Определить возрастной статус человека по известному году рождения в соответствии с таблицей.
Задание:
Определить возрастной статус человека по известному году рождения в соответствии с таблицей. Разработать два варианта программы: без отсечения и с использованием отсечения.
Возраст, лет | Статус |
---|---|
< 2 | младенец |
2 – 12 | ребенок |
12 – 16 | подросток |
16 – 25 | юноша |
25 – 70 | мужчина |
70 – 100 | старик |
> 100 | долгожитель |
Код программы без отсечения:
predicates
nondeterm статус(integer,string)
nondeterm проверка(integer,integer)
nondeterm результат
clauses
проверка(Год, Возраст):-
Год<=2014,
Год>=1865,
Возраст=2014-Год.
статус( Год,"Младенец") :-
проверка(Год, Возраст),
Возраст>=0,
Возраст<2.
Скриншоты результатов:

Код программы с использованием отсечения:
predicates
nondeterm статус(integer,string)
nondeterm результат
clauses
статус(Год,_):-
Год>2014, !,fail;
Год<1865, !,fail.
статус( Год,"Младенец") :-
…
Скриншоты результатов:

Контрольные вопросы:
1. Для чего используется отсечение?
Можно выделить три основные случая использования отсечения:
1) для устранения бесконечного цикла;
2) при программировании взаимоисключающих утверждений;
3) при необходимости неудачного завершения доказательства цели.
2. Как обозначается отсечение в программе?
Отсечение в Prolog-программах обозначается восклицательным знаком(!)
3. Механизм работы отсечения
Отсечение реализуется следующим образом: после согласования целевого утверждения, стоящего перед отсечением, все предложения с тем же предикатом, расположенные после отсечения, не рассматриваются.
4. «Красное» и «зеленое» отсечения.
Если известно, что определенные посылки никогда не приведут к осмысленным решениям (поиск решений будет тратой времени), - примените отсечение, - программа станет быстрее и экономичнее. Такой прием называют зеленым отсечением. Если отсечения требует сама логика программы для исключения из рассмотрения альтернативных подцелей. Это - красное отсечение.
Зеленое отсечение - это отсечение, которое не меняет семантику предиката, в котором используется, а красное отсечение - меняет семантику.
5. Какое отсечение, «красное» или «зеленое», в процедуре max2?
6. Повлияет ли на результат удаление отсечения в процедуре max2?
7. Что происходит после выполнения комбинации !, fail?
8. Могут ли располагаться подцели после предиката fail?
9. Декларативный и процедурный смысл Пролог-программы?
10. Важен ли порядок следования предложений в процедурах max1 и max2?
Вывод: приобрели практические навыки использования отсечения в программах на Visual Prolog.