Лабораторная работа

Prolog. Использование отсечения в пролог-программах

Категория:

Лабораторная работа

Дисциплина:

Функциональное и логическое программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Стоимость работы:

4 руб.

Оценка: 10
Объем страниц: 5
Год сдачи: 2021
Дата публикации: 09.06.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.

77