Page 10 - 4800
P. 10

auto = car(symbol,integer),
                   packing = box(integer, integer, integer); bottle(integer)
            описує дві області auto і packing. Область auto відповідає двокомпонентній структурі з
            функтором  car,  а  область  packing  відповідає  одній  з  двох  можливих  структур  box  і
            bottle, що розрізняються не тільки іменами, але і кількістю компонентів.
                   г) file = name1; name2 ; ... name_n
            використовується, коли необхідно посилатися на файли по їхніх символічних іменах.
                   Наприклад,  розглянемо  побудову  структури  даних  для  збереження  інформації
            про  комп'ютери.  При  цьому  кожен  комп'ютер  буде  розглядатися  як  набір  вхідних  у
            нього пристроїв, серед яких можуть бути: процесори з указівкою їхнього найменування
            і  частоти,  вінчестери  із  указівкою  їхнього  обсягу  і  фірми  виготовлювача,  також
            монітори визначеного типу. Область визначення доменів для цього прикладу буде мати
            вигляд
            domains
                   name , firm , type = symbol
                   freq , vol = integer
                   device = processor(name, freq); disk(firm, vol); monitor(type)
                   computer = device*
                   У  цьому  описі  домен  computer  є  списком  елементів  типу  device,  тобто  кожен
            елемент цього списку може мати структуру типу або processor, або disk, або monitor, що
            містять одну або два компоненти, кожна з яких має стандартний символьний чи цілий
            тип.

                   1.3.2 Секція predicates

                   У  секції  predicates  описуються  предикати  і  типи  (домени)  аргументів  цих
            предикатів. Імена предикатів повинні починатися з рядкової латинської букви, за якої
            слідує  послідовність  букв,  цифр  і  символів  підкреслення  (до  250  знаків).  В  іменах
            предикатів не  можна  використовувати  символи пробілу,  мінуса,  зірочки, зворотної  (і
            прямій) риски. Оголошення предикатів має форму:
            predicates
                  predicateName_1 (domen_11, domen_12,..., domen_1m)
                  predicateName_n (domen_n1, domen_n2,..., domen_nk)
            де  domen_ij  –  або  стандартні  домени,  або  домени,  оголошені  в  секції  domains.
            Оголошення  домену  аргументу  й  опис  типу  аргументу  –  те  саме.  Кількість  доменів
            (аргументів) предиката визначають арність (розмірність) предиката. Предикат може не
            мати аргументів і мати тільки ім'я. Звичайно вибирається таке ім'я предиката, щоб воно
            відображало визначений вид взаємозв'язку між аргументами предиката. Приклад опису
            предикатів:
            predicates
                   student( string,real)
                   start
                   good_student( string)
                   Можна  використовувати  кілька  описів  того  самого  предиката.  При  цьому  всі
            описи  повинні  слідувати  один  за  іншим  і  повинні  мати  однакове  число  аргументів.
            Нехай  потрібно  визначити  відношення  між  трьома  аргументами,  перші  два  з  яких
            відповідають  доданкам,  а  третій  –  сумі  двох  перших.  Цей  предикат  може  бути
            описаний у наступному виді:
            predicates
                   add(integer,integer,integer)
                   add(real,real,real)
            і дозволить його аргументам набувати значень як з області цілих, так і дійсних чисел.

                   1.3.3 Секція clauses

                   У секції clauses розміщаються факти і правила, з якими буде працювати Пролог,
            намагаючись довести мету програми.








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