Page 18 - 4800
P. 18
уніфікації і знаходить другу пропозицію, що також може бути погоджена з запитом.
Після уніфікації змінних система видає на екран Х =”Д.Соломон”
Y=bооk(„Використання Прологу”, 608) і закінчує процес уніфікації.
Якщо введемо запит written_by(Х, book(„Використання Прологу”, Y)), то спроба
уніфікації змінних з першою пропозицією програми буде виглядати так, як наведено на
рис. 2.1,б.
Оскільки Х вільна, то вона набуває значення константи „І.Братко”, і робиться
спроба встановити відповідність між двома структурами. Але складений об’єкт
узгодиться з іншим складеним об'єктом за умови, що вони мають однаковий функтор,
однакову кількість аргументів, і всі аргументи можуть бути попарно уніфіковані. Але,
константа „Використання Прологу” може бути уніфікована тільки з вільної змінної або
сама із собою. Оскільки між першими двома компонентами структури book
відповідність неможлива, то формується ознака невдачі, і система намагається
погодити мету з наступною пропозицією програми, переходячи до перевірки
відповідності з наступною пропозицією (рис. 2.1,в).
Вільна змінна Х уніфікується з константою „Д.Соломон”. Обидві структури
мають той самий функтор book, містять рівне число компонентів, і перші компоненти
обох структур – однакові константи. Тобто, ці структури можуть бути уніфіковані, і
при цьому константа 608 уніфікується із змінної Y. Тобто ціль досягнута, і Пролог
виводить повідомлення:
Х = „Д.Соломон” Y = 608
Нарешті, розглянемо виконання запиту: long_novel(X). Насамперед система
намагається відшукати пропозиції, заголовки яких погодяться з запитом (рис. 2.2).
long_novel( Х )
1
long_novel(Title):-written_by(_, book(Title, Length)) , Length>600.
а )
written_by( _ ,book( Title , Length) )
1 2 3 4 5
written_by(„І.Бpaткo” ,book(„Програмування мовою Пролог”, 560)).
б )
written_by( _ ,book( Title , Length))
1 2 3 4 5
written_by(„Д.Соломон” ,book(„Використання Турбо-Прологу ” , 608)).
в ) Рисунок 2.2 –
Уніфікація змінних при виконанні запиту long_novel(X)
Після цього узгоджуються ліва і права частини правила. Змінні Х и Title
узгоджуються, тому що вони вільні і стають однієї і тієї ж змінною. Потім Пролог
оголошує першу пропозицію зазначеного вище правила підзадачею і робить спробу її
уніфікації (рис. 2.2,б).
Оскільки анонімна змінна узгоджується з будь-яким об’єктом і структури book
також погодяться, то ці два предикати можуть бути уніфіковані. У результаті цього
змінна Title набуде значення „Програмування мовою Пролог”, а змінна „Length” стає
рівною 560.
Після цього робиться спроба узгодити другу підціль тіла правила, а саме:
Length>600. Перед спробою уніфікації зв’язана змінна Length заміняється своїм
чисельним значенням 560. Оскільки вираз: 560 > 600 хибний, то Пролог робить
повернення назад до вже доведеної підцілі і намагається її передовести. Тобто знову
намагається уніфікувати першу підціль written_by(_, book(Title, Length)),
використовуючи наступний з наявних фактів (рис. 2.2,в), який зв'язує Title з
„Використання Прологу” і Length з 608. У даному випадку виявляється: Length>600,
тобто друга підціль також стає істинною. Правило цілком погоджене при отриманих
значеннях змінних, задача вирішена, про що видається повідомлення:
Х=„Використання Пролога”
Вихідна мета є цілком доведеною, і робота системи Пролог закінчується.
Складний об’єкт може уніфікуватись або з простою змінною, наприклад,
data(''Квітень'', 2, 1981) зрівнюється з X і зв’язує X з date(“Квітень”, 2, 1981), або ж зі
18