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
   12   13   14   15   16   17   18   19   20   21   22