Page 9 - 4800
P. 9

другий  ці  відношення  визначаються.  Для  набору  фактів  і  правил,  розглянутих  вище,
                  один з можливих прикладів програми на Пролозі матиме вигляд:
                         /* програма 1.1 */
                  predicates
                         likes(string,string)                /* опис предиката */
                  clauses
                         likes ("Іван","Марія").                    /* факт */
                         likes ("Петро","пиво").                    /* факт */
                         likes ("Іван",X) if likes ("Петро",X).     /*  */
                  goal
                          likes(Who,"пиво").
                         У  цій  програмі  предикат  likes  описує  структуру,  відношення,  домени  якого
                  мають  тип  рядка  символів.  Факти  і  правила  записані  у  вигляді  пропозиції  Пролог-
                  програми,  кожна  з  них  закінчується  крапкою,  а  текст  у  /*  ...  */  –  це  коментарі.  При
                  запиті про пошук всіх любителів пива, мета повинна бути сформульована в секції goal.
                  У  відповідь  на  цей  запит  Пролог  виведе  всіх  тих,  хто  любить  пиво,  зв'язуючи  їх  з
                  змінною Who.
                         Однак використання в Пролог-програмах тільки двох секцій, тобто predicates і
                  clauses,  є  достатнім  тільки  для  найпростіших  програм,  що  не  використовують  опис
                  даних і їхніх структур, не працюють з динамічними базами даних.
                         У програмі можуть бути присутнім ще два розділи, що забезпечують визначення
                  глобальних доменів і предикатів.
                         – Global domains - розташовується після розділу domains.
                         – Global predicates – слідує за розділом predicates.
                         Визначення  типів  даних  і  предикатів  у  цих  розділах  дозволяє  забезпечити
                  міжмодульний інтерфейс.
                         Розглянемо більш докладно призначення кожної із секцій програми.

                         1.3.1 Секція domains Пролог-програми

                         У секції domains описуються будь-які нестандартні домени, використовувані для
                  аргументів предикатів. Домени в Пролозі є аналогами типів в інших мовах. Основними
                  стандартними доменами Пролога є:
                         char – символ в одиночних лапках (наприклад, 'а');
                         integer  –  ціле  від  -32768  до  32767  (переводиться  в  дійсне  автоматично,  якщо
                  необхідно);
                         real – дійсне (наприклад, -68.72, бе-94, -791е+21);
                         string  –  послідовність  символів  у  подвійних  лапках  (наприклад,  "натисніть
                  ввід");
                         symbol  –  або  набір  латинських  букв,  цифр  і  символів  підкреслення,  у  якому
                  перший символ  - прописна буква  (наприклад,  n_fax); або  послідовність символів, що
                  містить пробіли або починається з малої літери, укладена в лапки (наприклад, "Список
                  СУБД").
                         file – символічне ім'я файлу, що починається з прописної букви.
                         Крім стандартних доменів користувач може використовувати свої. Для цього в
                  області оголошення доменів можна використовувати наступні формати:
                         а) name = stanDom,
                  де stanDom – один зі стандартних доменов: int, char, real, string або symbol; name – одне
                  або кілька імен доменів. Наприклад, fio=symbol або year, height=integer;
                         б) mylist = elementDom*,
                  де mylist – область, що складається зі списків елементів з області elementDom, що може
                  бути  визначена  користувачем  або  мати  стандартний  тип.  Наприклад,  number5th  =
                  integer* або letter = char*;
                         в)      myCompDom=functor1(d11,...,d1n);         functor2(d21,...,     d2n);      ...
                  functorm(dm1,...,dmq),
                  де myCompDom – область, що складається зі складених об'єктів, описуваних вказівкою
                  функтора  та  областей  для  всіх  компонентів.  Права  частина  такого  опису  може
                  визначати  кілька  альтернатив,  розділених  ";"  або  "or".  Кожна  альтернатива  повинна
                  містити єдиний функтор, і опис типів для компонентів dij. Наприклад,





                                                               9
   4   5   6   7   8   9   10   11   12   13   14