Page 13 - 4800
P. 13

результатів  на  екрані,  а  також  забезпечення  пошуку  всіх  значень,  що  задольняють
                  запитові.
                         Застосування  предиката  fail  викликає  стан  невдачі  при  доведенні  цільового
                  твердження і перехід до повторного його доведення при інших початкових значеннях.
                         Предикат  hello(person)  з  програми  1.2,  можна  використовувати  для  виводу  у
                  вікно  будь-яких,  визначених  у  ньому  термів,  що  дозволяє  використовувати  його  як
                  інтерфейс  для  раніше  розробленої  програми  1.3.  Можливо  два  варіанти  спільного
                  використання предикатів з цих двох програм:
                         –  режим  переносу  у  вихідний  модуль  описів  і  визначень  предиката  шляхом
                  копіювання з іншого файлу;
                         –  режим  текстової  підстановки  у  вихідний  модуль  файлу,  що  містить  опис  і
                  визначення необхідних предикатів.

                         1.5 Використання структур як доменів відношень

                         Пролог  дозволяє  створювати  об'єкти,  компонентами  яких  є  інші  об'єкти.
                  Причому  складні  об'єкти  розглядаються  й  обробляються  так  само,  як  і  прості.  Це
                  сильно спрощує складання програм і організацію баз даних.
                         Наприклад, поняття колеги можна визначити, як пару осіб, об’єднаних єдиною
                  метою,  інтересом,  предметом  діяльності  і  т.д.  При  такому  формулюванні  поняття
                  колеги ми можемо для його реалізації сформувати відношення
                         Об’єднує(Особа_1, Особа_2, Предмет)
                  або в синтаксисі мови Пролог
                         unite(name, name, object)
                         І тоді можна було б, наприклад, називати людей колегами, якщо:
                         – поєднує Возняка і Денегу робота;
                         – поєднує Савюк і Петренка загальне хобі, яким є спорт;
                         – поєднує Петренка і Скрипника проект по нових системах для IСS;
                         – поєднує Козлова і Кардаша спільна трудова діяльність;
                         Першу пропозицію легко представити у вигляді факту на Пролозі, що буде мати
                  вигляд
                         unite(„Возняк”, „Денега”, labour )
                         Але якщо другу пропозицію записати в аналогічній формі, тобто
                         unite(„Савюк” , „Петренко”, sport),
                  то воно не буде відповідати дійсності, тому що з нього зовсім не випливає, що спорт є
                  загальним захопленням двох осіб, тобто є їх хобі. Більш того воно хибне, тому що з
                  нього  можна  припустити,  що  Савюк  і  Петренко  професійні  спортсмени,  об'єднані
                  загальними  спортивними  справами.  Неправильним  буде  і  рішення  вказати  третій
                  аргумент наступним чином
                         unite(„Савюк”, „Петренко”, „hobby sport”),
                  тому що hobby є деякою властивістю об’єкта спільної діяльності, а sport є конкретним
                  значенням  цієї  властивості.  Тобто  hobby  –  це  атрибут  об'єкту  object,  а  sport  –
                  конкретний  екземпляр  цього  атрибута.  При  такому  підході  єдиний  варіант  запису
                  другої пропозиції буде
                         unite(„Савюк” , „Петренко”, hobby(sport)),
                  де hobby(sport) – це складений терм або структура Прологу. Тоді за аналогією можна
                  записати факти для другої і третьої пропозицій
                         unite(„Петренко”, „Скрипник”, project("New system", ics)),
                         unite(„Козлов”, „Петренко”, labour),
                         Тому, можна зробити висновок про те, що у визначенні колеги через відношення
                  unite перші два домени є простими об’єктами, а третій – це складний об’єкт, атрибути
                  якого самі є об’єктами.
                         Опис даного відношення на Пролозі у вигляді предиката і визначення областей
                  зміни його аргументів буде мати вигляд:
                  domains
                         name, firm=symbol
                         object =labour; hobby(name); project(name, firm)
                  predicates
                         unite(name, name, object)





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