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