Page 12 - 4800
P. 12

Перелік і призначення стандартних предикатів наведений у додатку А.
                   Однак  найчастіше  метою  є  складний  запит  до  програми.  Для  доведення  якої-
            небудь складної мети Пролог повинний довести всі його підцілі, створивши при цьому
            необхідну  множину  зв'язаних  змінних.  Якщо  ж  одна  з  підцілей  помилкова  Пролог
            повернеться  назад  і  перегляне  альтернативні  рішення  попередніх  підцілей,  а  потім
            знову піде вперед, але з іншими значеннями змінних. Цей процес називається „пошук з
            поверненням”.

                   1.3.5 Секція database

                   Ключове  слово  database  вказує  на  початок  послідовності  описів  предикатів
            динамічної бази даних. Динамічна база даних є базою, у яку факти додаються під час
            виконання  програми.  Вимоги  до  описів  предикатів  такі  ж,  як  і  в  секції  predicates.
            Факти,  що  належать  динамічній  базі  даних,  обробляються  відмінним  від  звичайних
            предикатів  чином  для  того,  щоб  прискорити  роботу  з  БД  великого  обсягу.  Факти
            динамічної  бази  можуть  модифікуватися  протягом  сеансу  роботи,  завантажуватися  з
            дискового  файлу  за  допомогою  стандартного  предиката  consult  або  записуватися  в
            дисковий файл за допомогою предиката save.

                   1.4 Розробка найпростішого інтерфейсу програми

                   Формування  внутрішньої  мети  програми  вимагає  від  користувача  не  тільки
            завдання  запиту,  але  і  забезпечення  відображення  його  результатів  на  екрані.  Тому
            необхідно змінити мету, додавши ще одну підціль, що забезпечує відображення терму
            на екрані дисплея:
            goal
                   likes(Who,"пиво"), write(Who).
                   Запустимо  на  виконання  програму,  у  якій  мета  являє  собою  вже  кон'юнкцію
            двох  підцілей.  У  результаті  виконання  цієї  програми  у  вікні  діалогу  видається
            повідомлення про один розв’язок,
                   Петро
                   Зв'язано  це  з  тим,  що  при  значенні  Who="Петро"  кожна  з  підцілей  приймає
            значення  “істина”  і  вся  мета  стає  істинної,  що  приводить  до  закінчення  процесу
            висновку. Таким чином, при використанні внутрішньої мети шукається тільки перша з
            правильних відповідей. Для забезпечення пошуку всіх розв’язків слід скористатися ще
            одним вбудованим предикатом fail.
                   Таким  чином,  з  використанням  внутрішньої  мети,  нашу  програму  можна
            представити в такому вигляді:
                   /* Програма 1.3 */
            domains
                   person,thing = string
                   predicates
                   likes(person,thing)
            goal
                   likes(Who,"пиво"), write(Who), nl, fail. /* ціль */
            clauses
                   likes("Іван","Марія").
                   likes("Петро","пиво").
                   likes("Іван",X) :- likes("Петро",X).
                   Мета  рішення  складається  з  чотирьох  підцілей,  з'єднаних  між  собою  комами,
            тобто мета рішення задачі представляється кон'юнкцією підцілей. Мета буде досягнута,
            тобто матиме значення "істина" (true), якщо кожна з підцілей буде істинною. Підцілі
            даної програми містять один визначений користувачем предикат likes і три вбудованих
            стандартних предикати Пролога:
                   – write(term) – виводить терм на дисплей,
                   – nl – забезпечує перехід на новий рядок,
                   – fail – викликає стан невдачі при доведенні цільового твердження.
                   Включення в мету додаткових підцілей зв'язане з тим, що завдання мети вимагає
            від користувача не тільки формулювання запиту, але і забезпечення відображення його





                                                         12
   7   8   9   10   11   12   13   14   15   16   17