- •Міністерство освіти і науки України, молоді та спорту
- •Розділ ι. Механізм повернення та відсічки в логічному програмуванні
- •Механізм перепогодження цільових тверджень.
- •2. Суть механізму відсічки у логічному програмуванні
- •3. Основні випадки застосування механізму відсічки
- •Розділ ιi. Типові способи використання механізму відсічки та повернення
- •1. Комбінація відсічки та предиката fail
- •Типові випадки використання механізму генерування розв'язків та перевірки
-
Типові випадки використання механізму генерування розв'язків та перевірки
В якості ще одного прикладу використання відсічки розглянемо третій випадок породження і перевірки варіантів. Розглянемо програму ділення цілих чисел, використовуючи операції підсумовування та множення.
розділити(Nl,N2,R) :- ціле число(R) ,Dl = R*N2,
D2 = (R+1)*N2,N1 >= Dl,Nl < D2,! .
В цьому правилі використано рекурсивний предикат ціле_число для породження цілих чисел. Його визначення дано раніше. Інші цільові твердження виконують функцію перевірки. Очевидно, результатом може бути одне-єдине число. Незважаючи на те, що генератор ціле_число(N) породжує цілий континіум передбачуваних розв'язків, як тільки виконуються нерівності, зустрічається відсічка й інші альтернативи розв'язання стають неможливими.
При використанні відсічки необхідно добре усвідомлювати, як будуть використані правила з відсічкою, оскільки її незаплановане використання може привести до непередбачуваного результату. Розглянемо приклад незапланованого використання відсічки. Розглянемо предикат визначення кількості родичів людини:
число_родичів(адам,0):-!.
число_родичів(єва,0):-!.
число_родичів(X, 2).
Адам і Єва не мають родичів, у всіх інших людей їх є двоє. Але якщо тепер звернутися до Прологу із запитанням:
? – число_родичів(адам,2) .
то відповідь буде:
так
У такому разі покращення можна досягти, якщо змінити визначення так:
число_родичів(адам,0).
число_родичів(єва,0).
число_родичів(X,2):- X \= адам,Y \= єва.
Але знову сформулюємо запит:
? - числo_рoдичів (X, Y) .
Наше визначення не дасть можливості видати всі результати. Звідси можна зробити висновок, що надійне використання механізму відсічки можливе лише у разі повного уявлення про його використання у сформульованих правилах.
ВИСНОВОК
В ході написання реферату було сказано декілька слів про мову програмування Пролог. Пролог описує не процедуру розв’язання задачі, а логічну модель предметної галузі. Тому її необхідно розглядати не як процедурну, а як описову.
Але більшу увагу було звернено на сам механізм відсічки.
Були розглянуто суть механізму відсічки у логічному програмуванні, основні випадки застосування механізму відсічки, комбінація відсічки та предиката fail, а також типові випадки використання механізму генерування розв'язків та перевірки.
Під час опису кожного з цих пунктів, з метою навчання та для кращого розуміння використовувались приклади написані на мові Пролог.
Механізм відсічки є дуже потрібним, адже він дає змогу вказати, які з раніше зроблених розв’язків не слід перепогоджувати при поверненні по ланцюжку погодження цільових тверджень. Цей механізм дає змогу відсікти можливі альтернативні розв’язки і зупинятися на бажаному.
ВИКОРИСТАНІ ДЖЕРЕЛА:
1. В.М. Заяць, М.М. Заяць «Логічне і функційне програмування», - навчальний посібник для студентів базового напрямку 0804 «Комп’ютерні науки », Львів, «Бескид Біт», 2006
2. навчальна інтеренет-бібліотека Wikipedia.
