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