Факти та правила Прологу отримують інформацію, якщо вони викликаються з аргументами, які є або ж константами, або ж зв`язаними змінними. Вони повертають інформацію в процедуру виклику шляхом зв`язування змінних аргументів, які не були зв`язані.
Унифікація - це процес обробки на співпадання двох предикатів і призначення вільних змінних. Вона включає наступні кроки:
1.Пролог пробує задовільнити ціль. починаючи з початку програми шукати відповідність.
2.Коли запитується новий виклик, пошук також починається з початку програми.
3.Коли виклик знаходить успішно відповідність (кажуть виклик повертається), викликається наступна підціль.
4.Якщо змінні зв`язані в підпункті, тоді єдиний шлях звільнить їх - бектрекінг.
Можна виділити чотири основні пункти бектрекінгу:
1.Підцілі повинні бути задоволені в послідовності зверху вниз.
2.Пункти предикату тестуються в тому порядку, в якому вони з`являються в програмі при перегляді зверху - вниз.
3.Ціль буде задоволена, якщо буде знайдена відповідність для кожного рівня відповідного дерева.
4.Виклик, який породжує множину рішень, є недетермінованим.
Узагальнення.
1.Пролог має три предикати для контролю напрямку логічного пошуку вашої програми:
* fail є завідомо невдачею. За допомогою його включається механізм бектрекінгу для пошуку альтернативних рішень;
* not приймає значення істина, коли для асоційованої з ним підцілі не може бути доведено істинність.
* cut - виключає бектрекінг.
2.Можна розглядати, що правила Прологу є визначеннями процедур з точки зору процедурної перспективи. З точки зору процедурної перспективи, правила можна розглядати як варіанти оператору case Паскалю.
Вправи.
4.1.Нехай маємо програму
P: - a, b.
P: - c.
Декларативна сутність якої наступна: р буде істинним тоді і тільки тоді, коли будуть істинні одночасно і а і b, або буде істинним с.
Яким буде декларативна сутність програм?
а) р: - а,!, b.
P: - c
б) р: - с
р: - a,!, b.
4.2.Наступні відношення розподіляють числа на три класи - додатні, нуль і від`ємні:
клас (Число, додатні): - Число>0.
Клас (0, нуль).
клас (Число, від`ємні): - Число<0.
Зробіть цю процедуру більш ефективною за допомогою відтинання.
4.3.Нехай маємо програму
Р(4)
р(5): -!
Р(6).
Напишіть відповіді пролог-системи на наступні питання:
а) goal: p(X).
б) goal: p(X), p(Y).
c) goal: p(X),!, p(Y)
4.4.Напишіть програму знаходження максимума двох чисел, використовуючи предикат відтинання.
5.ПРОСТІ ТА СКЛАДНІ ОБ'ЄКТИ.
В цій лекції ми розглянемо весь спектр даних, починаючи з простих і закінчуючи складними даними, які будуються з простих.
5.1 Прості дані.
В якості простих даних виступають змінні або ж константи. Константа може бути або ж символьною (char), або ж числовою (integer, real), атомарною (symbol, string).
Змінна позначається ідентифікатором. Ідентифікатор починається з великої букви у діапазоні від А до Z, або ж символом підкреслення (_). Як ми вже зазначали, єдиний символ підчеркування позначає анонімну змінну. В Пролозі змінна може зв'язуватись з любим допустимим аргументом або об'єктом даних. Відмітимо, що змінні Прологу є локальними, а не глобальними. Іншими словами, якщо два пункти мають змінну Х, тоді ці Х є різними змінними.
5.1.1. Константи як об'єкти даних.
Константи включають символи, числа і атоми. Значення константи міститься в її імені. Так константа 2 може символізувати тільки число 2, а константа abracadabra може символізувати тільки стрічку abracadabra.