Page 17 - 4800
P. 17
Goal: Х = “Іван”
Х = “Іван”
2. Змінна уніфікується із змінною, при цьому обидві вони стають однієї і тією ж
змінною.
Goal: X=Y
Х=_1
Y=_1
3. Анонімна змінна уніфікується з чим завгодно.
_ = “Іван”
4. Константа може бути уніфікована з іншою константою, якщо вони ідентичні
або з вільною змінною відповідного типу.
Goal: “Іван” = “Іван”
True
5. Структура уніфікується з іншою структурою за умови, що їх функтори
однакові, а аргументи можуть попарно уніфікуватися.
father(X)=father(„Іван”)
X=„Іван”
Для того, щоб познайомитися з процесом уніфікації різних класів об'єктів
Прологу, розглянемо виконання програмою 2.1 декількох запитів.
/* Програма 2.1 */
domains
title, author=symbol
pages=integer
publication=book(title , pages)
predicates
written_by(author, publication)
long_novel(publication)
clauses
written_by("І.Бpaтко", book("Програмування мовою Пролог", 560)).
written_by("Д.Соломон" ,book("Використання Пролога", 608)).
long_novel(book(Title, Lеngth)):- written_by(_, book(Title, Length)), Length>600.
Розглянемо запит виду: written_by(X, Y). При рішенні задачі система повинна по
черзі погодити мету з пропозиціями програми, намагаючись досягти відповідності між
параметрами Х і Y з однієї сторони і параметрами пропозицій програми з іншої, через
операцію уніфікації.
Тому що в даному запиті змінні Х та Y є вільними і можуть узгоджуватися з
будь-якою константою, то найперша ж пропозиція для предикату written_by дає бажану
відповідність (рис. 2.1,а), тобто Х конкретизується константою „І.Братко”, а Y приймає
значення структури book(„Програмування мовою Пролог”, 560). Система Пролог
позначає цю точку покажчиком повернення і видає на екран повідомлення:
Х=„І.Братко” Y=book(„Програмування мовою Пролог”, 560)
written_by( Х , Y )
1 2 3
written_by(„І.Бpaтко”, book(„Програмування мовою Пролог”, 560)).
а)
written_by( Х , book („Використання Турбо-Прологу”, Y )
1 2 3 4
written_by(„І.Братко” , book(„Програмування мовою Пролог” ,560) ).
б)
written_by( Х , book(„Використання Турбо-Прологу”, Y )).
1 2 3 4
written_by(„Д.Соломон”, book(„Використання Турбо-Прологу”, 608 )).
в)
Рисунок 2.1 –
Уніфікація змінних
Оскільки ми задавали запит як зовнішню мету, система повертається в точку,
позначену покажчиком повернення і продовжує, починаючи з цієї точки, процес
17