Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_Пролог_Етап2_10.doc
Скачиваний:
14
Добавлен:
23.03.2015
Размер:
1.57 Mб
Скачать

2.2. Основні теоретичні відомості Основні визначення мови Visual Prolog

Програма, написана мовою Visual Prolog, складається з фраз (речень). У кінці кожнї фрази ставлять крапку. Фрази мови Пролог бувають трьох типів: факти, правила і запитання.

Факти містять твердження, завжди безумовно правильні. Факт – це твердження, яке визначає відношення між об’єктами або описує ознаки об’єкта. Формат запису факту має такий вигляд:

<ім’я відношення>(ім’я_об’єкта1, ім’я_об’єкта2,…, ім’я_об’єкта).

У процесі запису факту треба додержуватися таких правил:

  1. Імена всіх відношень і об’єктів мають починатися з малої літери.

  2. Спочатку записують ім’я відношення, потім у круглих дужках через кому – імена об’єктів.

  3. Кожен факт повинен закінчуватися крапкою.

  4. Імена об’єктів у дужках перераховують в одному вибраному порядку.

Наприклад, факти з одним та двома об’єктами можна записати таким чином:

car(black).

speak(liza, english).

Природною мовою ці факти означають таке: „Автомобіль чорний” та „Ліза говорить англійською”.

Правило містить твердження, істинність якого залежить від деяких умов. Формат запису правила має вигляд

голова правила>:– <тіло правила.

Голова – це факт, що буде правильним за виконання умов, які знаходяться в тілі правила. Умови в тілі правила являють собою терми, з’єднані між собою комою або крапкою з комою (кома означає „і”, а крапка з комою – „або”). Символ „:–”, який стоїть між головою та тілом правила, означає „якщо”. Наприклад, правило

buy(peter, car) :– like(peter, car), have(peter, money).

можна інтерпретувати таким чином: „Пітер купить автомобіль, якщо автомобіль подобається Пітеру і Пітер має гроші”.

Запитання складаються з одного або декількох цільових тверджень. Пролог-система розглядає запитання як мету, якої треба досягти. Запитання можна розглядати як правило, яке має тільки тіло. У Visual Prolog запитання розміщують у розділі goal. Наприклад, запитання: buy(peter, car). можна інтерпретувати так: „Чи купив Пітер автомобіль?”.

Атом – це ім'я, число без знака або символ: liza, 12, z.

Змінна – абстрактний об’єкт, ім’я якого починається з великої літери або символу підкреслювання: X, Y, Man, _number.

Аргумент – ім'я об'єкта в круглих дужках.

Домен – тип даних.

Предикат – це символьне ім’я (ідентифікатор), яке пов’язує відношення з його аргументами:

family(peter, joan, kate, bob),

де family – предикат;

peter, joan, kate, bob – аргументи.

Функтор – ім'я складного об'єкта, наприклад:

date(3, october, 2001),

де date – функтор.

База даних у мові Пролог – це сукупність фактів.

Уніфікація – процес перевірки двох термів на відповідність одне одному.

Терми – всі об'єкти даних у мові Пролог, наприклад: date(3, october, 2001), october.

2.3. Структура програми, складеної мовою Visual Prolog

Програма, написана мовою Пролог, складається з чотирьох основних розділів (секцій), охарактеризованих нижче.

І. Розділ domains призначений для оголошення доменів, які не є стандартними доменами Прологу.

У традиційній мові Пролог є тільки один тип – домен. У Visual Prolog треба оголошувати домени аргументів предикатів. Розділ domains уможливлює досягнення двох цілей. По-перше, можна давати смислові імена доменам, навіть якщо вони за своєю суттю є стандартними доменами Прологу. По-друге, можна оголошувати структури даних, які не є стандартними доменами. Visual Prolog 5.2 підтримує нижчезазначені домени.

1. Базові стандартні домени:

char (символи) – окремий символ або символ після знака „\” розміщений в апострофах: ‘t’, ‘0’, ‘\\’ („\”), ‘\”’ (лапки ”), ‘\’’ (апостроф ’), ‘\n’ (перехід на наступний рядок), ‘\t’ (табуляція). Після знака „\” можна використовувати ASCIІ-код символу: ‘\65’ (символ А), ‘\10’ (символ пробілу);

real (дійсні числа) – довжина типу 8 байтів;

string (рядки) – послідовність символів у лапках, наприклад: “Bonny”, “1991”, “Київ”;

symbol (символічні імена) – послідовність літер, цифр і знаків підкреслювання, яка починається з літери нижнього регістру, наприклад: cat, uncle_aunt, sky5;

  1. Інтегральні стандартні домени:

integer (цілі числа) – довжина типу залежить від платформи. Для 32-бітової платформи довжина складає 4 байти;

byte, sbyte, short, ushort, word, unsigned, dword, long, ulong (див. довідку Visual Prolog 5.2).

3. Бінарний домен – binary (див. довідку Visual Prolog 5.2).

4. Особливо оброблювані визначені домени (Specially Handled Predefined Domains) – accessmode, bgi_ilist, bt_selector, db_selector, dbasedom, denymode, file, place, ref and reg (див. довідку Visual Prolog 5.2).

ІІ. Розділ predicates призначений для оголошення предикатів та доменів аргументів предикатів.

Формат оголошення предиката такий:

predicateName(argument_type1, argument_type2, ..., argument_typeN)

Ставити крапку в кінці оголошення не потрібно. Як тип аргументу використовують стандартні домени, або домени, оголошені в розділі domains. Ім’я предиката починають з літери, за якою розташовують літери, цифри або знаки підкреслювання „_”. Максимальна довжина імені предиката – 250 знаків.

ІІІ. Розділ clauses – „серце” програми, складеної мовою Пролог. У ньому розміщено факти і правила, використовувані, коли Пролог намагається задовольнити запит програми.

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

Намагаючись задовольнити запит (вирішуючи питання, поставлені в розділі goal), Пролог починає перевіряти речення з верхньої частини секції clauses. Ідучи вниз, Пролог розміщує зовнішні покажчики на кожному реченні, які задовольняють поточну підмету. Якщо речення не є частиною логічного шляху, який веде до рішення, Пролог повертається до встановленого покажчика й шукає речення, яке задовольняє підмету (цей процес називають бектрекінгом).

IV. Розділ goal висвітлює стартову мету програми.

По-суті, розділ goal – це те саме, що й тіло правила, тобто просто список підцілей. Пролог автоматично здійснює мету, коли стартує програма. Якщо всі підцілі задоволено, програма закінчується успішно. У противному разі говорять що програма закінчується неуспіхом. Нижче наведено приклад програми.

DOMAINS

author, name, publisher = symbol

price = byte

quantity = ulong

PREDICATES

nondeterm book(author,name,publisher,price,quantity)

CLAUSES

book(alexander_abramov,riders_from_nowhere,raduga,15,200).

book(agatha_christie,selected_stories,progress,20,150).

book(jennifer_niederst,html,o_reilly,10,100).

GOAL

book(agatha_christie,selected_stories, _ , _ ,X).

Ця програма знаходить у БД кількість книжок автора Агати Крісті з назвою „Вибрані оповідання”. Нас не цікавлять видавництво й ціна, тому вони позначені анонімними змінними – знаком підкреслювання. Значення анонімних змінних не виводяться під час відповіді системи на запит.

V. Розділ database (або facts) – динамічна БД. У ній розміщено факти, які можна змінювати, видаляти чи додавати в БД під час виконання програми.

VІ. Розділ constants містить оголошення символічних констант. Синтаксис оголошення такий:

<Id> = <Macro definition>

де <Id> ім’я символічної константи; <Macro definition> – значення, яке присвоюють константі; наприклад:

CONSTANTS

zero = 0

ten = (1*(10–1)+1)

pi = 3.141592653

Існує декілька обмежень щодо використання символьних констант: визначення констант не може посилатися саме на себе; система не розрізняє літери верхнього і нижнього регістрів, тому в розділі clauses перша літера імені символьної константи повинна бути нижнього регістру, щоб система не сплутала константу зі змінною; у програмі може бути декілька розділів clauses, але оголосити символьну константу слід до її використання.

VІІ. Розділи global domains, global predicates і global facts дозволяють оголошувати глобальні домени, предикати та речення в програмі. Ці розділи розміщують на початку програми.