Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / ЛЕКЦИИ / POSIBNIK / ПРОГР НА ПРОЛОГЕ.doc
Скачиваний:
42
Добавлен:
23.03.2015
Размер:
669.7 Кб
Скачать

1.2. Синтаксис мови пролог

Синтаксис – це правила запису конструкцій мови. У математиці вирази складаються з об'єктів (числа, змінні), поєднаних за допомогою знаків операцій із застосуванням дужок. Операції бувають бінарні й унарні. Як правило, у математиці прийнята інфіксна форма запису виразів, тобто знак операції розташовується між операндами. Запис функцій використовує префіксну форму запису, тобто ім'я функції розташовується перед операндами, які, крім того, беруться у дужки, наприклад

(a/b + c/d)*(x + y)

cos(a+b)

-b/(2*a).

Існують мови (наприклад, мова ФОРТ), у яких застосовується постфіксна форма запису (тобто спочатку йдуть операнди, а потім – операція). Наприклад, наведений вище вираз у постфіксній формі запису з урахуванням дужок і пріоритетів операцій можна записати в такий спосіб:

a b / c d / + x y + * .

Така форма запису виразів називається зворотним польським записом і широко застосовується в трансляторах при обробці виразів.

При описі правил побудови виразів широко вживається поняття терма. Терм – це правильно побудований фрагмент виразу. Як правило, поняття терма визначається рекурсивно. Термами вважаються найпростіші вирази (наприклад, константи й змінні), а також терми, з'єднані за допомогою знаків операцій.

У ПРОЛОЗі для запису тверджень прийнята префіксна форма запису. Для запису математичних виразів може застосовуватися й инфіксна форма. У деяких реалізаціях ПРОЛОГу можна задавати свої власні інфіксні операції, що в такому випадку називаються операторами.

У нашому прикладі відношення “любить” має префіксну форму запису, а зв'язка “:-“ – це інфіксний бінарний оператор, що зв'язує між собою два операнди

Заголовок :-

Тіло.

Програма на ПРОЛОЗі складається з тверджень. Твердження будуються з об'єктів і операцій (предикатів), що можуть бути убудованими або визначеними користувачем.

1.3. Класифікація даних у пролозі

Усі об'єкти даних, використовувані в ПРОЛОЗі можна подати у вигляді такої схеми (рис. 2):

ДАНІ

ПРОСТІ СТРУКТУРИ

КОНСТАНТИ ЗМІННІ

ЧИСЛА АТОМИ

ЦІЛІ ДІЙСНІ

Рис. 2. Класифікація даних у ПРОЛОЗі

Структура складається з атома, що називається головним функтором структури, і послідовності термів – компонентів структури. Компоненти структури розташовують у дужках і відокремлюють один від одного комами. Функтор структури характеризується не тільки ім'ям, а й арністью. Арність структури визначається кількістю компонентів. Деякі функтори є операторами, тобто застосовують інфіксну форму запису.

Деякі найбільш важливі елементи мови можуть використовувати альтернативний синтаксис. Наприклад, список у ПРОЛОЗі – це послідовність елементів невизначеної довжини. Список може бути записаний у вигляді структури з бінарним функтором “.” (крапка). Список того, що любить Марія можна записати в такий спосіб:

. (яблука, .(персики, .(горішки, [ ])))

Як бачимо, арність функтора “.” – 2. Він з'єднує між собою голову списку (перший операнд) із хвостом списку (другий операнд). Хвіст списку – список без першого елемента. Хвіст списку – це завжди список. Знак [ ] служить для позначення атома – порожнього списку. Через особливу роль, яку відіграють списки в ПРОЛОЗі, для них допускається й альтернативний спосіб запису. Той же список можна подати таким чином:

[яблука, персики, горішки]

Будь-яка структура зберігається в пам'яті у вигляді дерева. Наприклад, наш список у пам'яті буде зберігатися таким чином:

.

яблука .

персики .

горішки [ ]

А правило, яке визначає, що ж любить Тетяна, буде зберігатися в такому вигляді:

:-

любить любить

тетяна Це марія Це

Найбільш важлива операція в ПРОЛОЗі – операція уніфікації (зіставлення зі зразком). Це бінарна операція, за допомогою якої в програмі відбуваються всі обчислення. Вона позначається знаком “=”. Наприклад,

X = яблука

Ця операція часто викликається і неявно при зіставленні цільового терму зі зразком, що зберігається в базі даних.

Правило виконання уніфікації: два терми будуть уніфіковані, якщо:

  1. вони ідентичні;

  2. змінним в обох термах можна надати значення (конкретизувати) об'єктів (у загальному випадку – термів) таким чином, що після підстановки цих об'єктів у терми замість змінних терми стануть ідентичними.

Розглянемо це більш докладно.

Правило уніфікації констант і змінних

Нехай є два терми S і T, звідси

  1. якщо S і T – константи, то вони уніфіковані, якщо являють собою один і той же об'єкт;

  2. якщо S – вільна змінна, а T – довільний об'єкт, то вони уніфіковані й S набуває значення T і навпаки.

Правило уніфікації структур

Якщо S і T – структури, то вони уніфіковані, коли:

  1. вони мають однаковий головний функтор;

  2. усі їхні відповідні компоненти уніфіковані.