Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
05.03.2016
Размер:
1.28 Mб
Скачать

5.8 Труднощі у використанні відсікання і заперечення

Виділимо спочатку переваги використання відсікання:

1. За допомогою предикату cut можна підвищити ефективність програми.

2. Використовуючи cut, можна описати взаємовиключні правила, тому є можливість запрограмувати твердження: якщо умова P, тоді розв’язок Q, інакше розв’язок R.

Обмеження на застосування відсікання виходять із декларативної сторони прологової програми. Якщо в програмі немає відсікання, можна міняти місцями порядок речень і цілей. Коли ж предикат cut присутній у програмі, тоді зміна порядку речень у програмі може вплинути на її декларативний зміст (дати інший розв’язок).

Якщо вилучення відсікання з програми не міняє її декларативного змісту, то його називають “зеленим”. В іншому випадку відтинання називають “червоним”.

Працювати із запереченням також треба обережно. Труднощі виникають тому, що заперечення, яке використовується, не повністю відповідає математичному запереченню.

Якщо побудуємо запит системі goal: not(dog(„Шарік”)), вона, можливо, відповість “так”. Але цю відповідь не можна розуміти як повідомлення про те, що “Шарік не собака”, а потрібно трактувати так, що системі не вистачає інформації для доведення твердження “Шарік – собака”. Такий підхід бере свій початок від припущення про замкнутість світу. Відповідно до цього постулату світ замкнутий у тому розумінні, що все існуюче в ньому або указане в програмі, або може бути з неї виведене. І в іншому випадку, коли чогось немає в програмі (не може бути з такої виведено), тоді воно хибне, і відповідно буде істинним його заперечення.

Ми ж традиційно не вважаємо світ замкнутим: якщо в програмі явно не сказано, що dog(„Шарік”), то це ще не означає, що ми хочемо сказати: “Шарік не собака”.

Розглянемо напраклад наступну програму

/* Програма 5.3 */

predicates

r(symbol)

g(symbol)

p(symbol)

clauses

r(a).

g(b).

p(X):-not(r(X)).

На запит g(X), p(X) cистема дасть відповість Х=b, а на p(X), g(X) система дасть відповідь no (ні). Уся різниця в тому, що в першому випадку змінна Х до моменту обчислення Р(X) була вже зв’язана, а в другому цього ще не трапилось.

5.9 Зміст звіту по лабораторній роботі

Звіт по лабораторній роботі повинен містити:

  1. Результати виконання завдання 4 даної лабораторної роботи.

  2. Відповідно до завдання 5 текст налагодженої програми формування меню, що у відповідь на вибір опції меню відкриває деяке вікно, а після натискання клавіші повертається в основне меню, закриваючи вікно.

  3. Повний текст програми запитальної системи по товаришах по службі і результати її досліджень відповідно до завдань 6,7,8

  4. Результати виконання завдання 10.

  5. Текст налагодженої програми запитальної системи по службовцях і відділам, з використанням меню.

  6. Дослідіть з допомогою трасування виконання наведених запитів до програми 5.3.

  7. Індивідуальне завдання.

Лабораторна робота №6 Рекурсія і рекурсивні процедури в Пролозі

Ціль роботи:

  1. Знайомство з рекурсією, як з алгоритмічним методом.

  2. Вивчення способів побудови рекурсивних процедур.

  3. Знайомство з особливостями рекурсії в Пролог-програмах.

  4. Вивчення способів забезпечення цілісності відносин.