Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
48
Добавлен:
05.03.2016
Размер:
1.28 Mб
Скачать

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. Наприклад,

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, що містять одну або два компоненти, кожна з яких має стандартний символьний чи цілий тип.