правила, а також задавати загальні питання.
* Змінні в Пролозі отримують свої значення при співставленні з константами в фактах і правилах;
* Тому, що змінна є зв`язаною тільки в середині однієї фрази, не можна зберігати інформацію, присвоївши значення змінній.
8.Анонімна змінна ніколи не отримує значення.
9.Коментарі використовуються традиційним для програмістів чином. Коментар починається символами /* і закінчується символами */ .
2.5.Способи Співставлення.
В Пролозі існує декілька способів співставлення:
1. Ідентичні структури співставляються між собою;
2. Вільна змінна співставляє константу або раніше прив'язану змінну і стає зв'язаною з цією величиною.
3. Дві вільні змінні можуть співставляться і бути зв'язаними між собою. На протязі часу зв'зування, вони розуміються як одна змінна. Іншими словами, якщо одна із змінних отримала якесь значення, інша - зразу ж отримує те ж значення.
Наприклад, відношення
parent(joe,X) співставляючись з Parent(joe,Y) ...
зв'язує змінні Х та У відповідним чином.
4. В Пролозі зв'язування (присвоєння) проходить двома способами: на вході і виході. Коли змінна потрапляє в фразу, вона стає вхідним параметром і позначається (i); а, коли виходить із фрази - стає вихідним параметром, який позначається (о).
Позначення.
Для полегшення читання в Пролозі використовуються наступні позначення:
:- cимвол if;
, слово аnd;
; cлово or .
Вправи.
2.1.Напишіть речення українською, які говорять про те, що визначають для людини наступні фрагменти Прологу:
1.дівчина (Галя);
2.подобається (Що, івану);
3.подобається (Що, івану) if подобається (Що, петру).
2.2.Напишіть фрагменти прологівських програм, які задають наступні твердження української мови:
1.Місто - Київ.
2.Місто Київ красиве.
3.Київ - столиця України.
4.Як називається столиця України?
2.3.Напишіть правило Прологу, яке відображає наступну ситуацію. Ми маємо факти батько(микола, іван), мати(ніна, іван). Потрібно описати правило, яке визначає батьків Івана.
2.4.Нехай у Пролог системи є набір фактів:
батьки(микола, ніна, іван)
батьки(петро, галя, андрій)
батьки(віктор, надія, марія).
Кожний з фактів трактується так. Перші два аргументи предикату є батьками особи, яку визначає третій предикат. Що буде реалізовувати запит:
1.Goal: батьки(X,Y,_);
2.Goal: батьки(_,_,Х).
3.СТРУКТУРА ПРОГРАМИ PDC ПРОЛОГУ.
3.1.Основні розділи програми.
В якості реалізуючої системи Прологу будемо розглядати PDC Пролог. Він вибраний тому, що на противагу більшості реалізацій Прологу, є компілятором.
В загальному, програма PDC Прологу (надалі будемо писати просто Пролог) складається з 3-4 розділів.
Розділ clauses - головна частина програми Прологу. Тут записуються факти та правила, які будуть використані для задовільнення цілі програми.
Розділ predicates - використовується для об'яви предикатів та доменів і опису типів їх аргументів. Коли ви об'являєте предикат, ви вказуєте Прологу які домени аргументів належать даному предикату. В ньому повинні бути присутніми всі предикати, зазначені в розділі clauses.
При використанні вмонтованих предикатів, наприклад, таких, як write, makewindow, nl і т.д., об'являти їх не має потреби.
Опис предикату починається з імені, потім, якщо вони існують, іде список типів аргументів, розділених комами і взятими в круглі дужки. Типи аргументу є або ж стандартними доменами, або ж доменами, які ви об'явили в розділі domains. Ім'я предикату повинно бути ідентифікатором.
Розділ domains - використовується подібно конструктору типів type в Паскалі. За допомогою цього розділу можна перейменувати /перевизначити/ стандартні домени і описати домени складних типів даних. Якщо в вашій програмі використовуються тільки стандартні домени, тоді в розділі domains взагалі не має потреби.
Розділ goal - використовується для задання вмонтованих (внутрішніх) цілей, коли ви бажаєте, щоб програма працювала незалежно від розвитку середовища Прологу. Іншими словами, якщо ви плануєте компілювати програму в самостійно виконувану програму, ви можете явно вказати ціль виконання.
Розділ constants - застосовується для об'яви констант. Використовується синтаксис:
<Ідентифікатор> = <Макровизначення>.
Тут присутні наступні обмеження:
в одній стрічці повинно бути визначення тільки одної константи;
заборонена рекурсія при визначенні константи;
в описі констант система не розпізнає великі та малі літери;
ідентифікатори констант є глобальними і можуть бути об'явлені тільки один раз.
Розділ database це розділ бази даних. Іноді під час виконання програми вам необхідно змінити деякі факти, з якими працює програма. Факти знаходяться в динамічній або внутрішній базі даних. Факти, котрі розміщуються в динамічній базі даних, повинні бути описані в розділі database.
3.2 Стандартні домени.
Пролог має декілька вмонтованих стандартних доменів, основні з яких приводяться нижче. Ви можете використовувати стандартні домени при опису типів аргументів предикату. Їх не потрібно визначати в розділі domains.
Домен | Опис
char
integer
real | символ, взятий в одинарні лапки цілі від -32768 до 32767 числа, з необов`язковим знаком + або - , який стоїть перед деяким числом DDDDDDD, потім необов`язкова десяткова крапка (.), яка стоїть перед наступним числом DDDDDDD і необов`якова експоненційна частина (е(+ -)DDD):<+: ->DDDDD<.>DDDDDDD<e<+ : ->DDD>
Приклади дійсних чисел:
42705 9999 86.74
9111.769483 521е238 67.85е+21
Допустимий діапазон чисел від 1е-307 до 1е+308. При необхідності цілі числа автоматично перетворюються в дійсні.
string | довільна послідовність символів, які заключені в подвійні лапки.
symbol | Існує два формати символів:
1. послідовність букв, чисел і підкреслень, які починаються з великої букви;
2. послідовність символів, які заключені в подвійні лапки (випадок, коли символ не починається з великої букви або ж коли містяться проміжки).
Число аргументів предикату називається арністю предикату. Пролог допускає предикати з однаковою назвою але різною арністю.
Пролог проводить автоматичне перетворення доменів:
1. між стрічками і символами;
2. між цілим, символьним і дійсним доменом.
3.3.Синтаксис правила.
Як ми вже зазначали, синтаксис правила складається з трьох частин:
голова: - <підціль>, <підціль>, ... , <підціль>.
Кожна підціль викликає відповідний предикат Прологу. Пролог - система тестує викликаний предикат і перевіряє чи може він задовільнитися. Якщо поточна підціль буде задоволена, тоді виклик справджується і обробка переходить до наступної підцілі. Якщо обробка успішно досягла крапки, тоді кажуть,