Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекція_3_5_6_7_основи_мови.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
375.3 Кб
Скачать

2. Основні розділи програм

Програма на Vіsual Prolog складається з наступних основних розділів:

директиви компілятора;

CONSTANTS - опис констант;

DOMAІNS - опис доменів;

FACTS - опис предикатів внутрішньої бази даних;

PREDІCATES - опис предикатів;

CLAUSES - опис тверджень;

GOAL - опис внутрішньої цілі.

У програмі не обов'язково повинні бути всі ці розділи, однак вона містить, щонайменше, розділи PREDІCATES й CLAUSES. У програмі може бути кілька розділів DOMAІNS, PREDІCATES, FACTS й CLAUSES. Однак розділів GOAL не може бути в програмі більше одного.

Порядок розділів може бути довільним, але при цьому константи, домени й предикати повинні бути визначені до їхнього використання. Однак у розділі DOMAІNS можна посилатись на домени, які будуть оголошені пізніше.

Розділ CLAUSES - це серце Vіsual Prolog-програми; саме в цей розділ записуються факти й правила, якими буде оперувати система, намагаючись вивести ціль програми.

Відразу ж дамо формальне визначення фрагмента синтаксису Прологу, користуючись РБНФ.

база_знань = факт {факт |правило}.

факт = предикат ".".

питання = предикат {"," предикат |";" предикат} ".".

правило = голова_правила ":-" тіло_правила ".".

голова_правила = предикат.

тіло_правила = предикат {"," предикат |";" предикат }.

предикат = ім'я | ім'я "(" аргумент {"," аргумент} ")".

аргумент = терм.

терм = число | змінна | атом | структура.

структура = атом "(" терм {"," терм } ")".

Дане визначення синтаксису не включає операторну, спискову й рядкову форми запису. Однак, будь-яка програма Прологу може бути написана згідно цього синтаксису. Спеціальні форми тільки спрощують розуміння програми. Як бачимо, синтаксис Прологу не вимагає великого пояснення. Але для написання гарних програм необхідно глибоке розуміння мови.

Розділ predіcates - це той, у якому оголошуються предикати й домени їхніх аргументів.

Розділ domaіns слугує для оголошення доменів, що не є стандартними для Vіsual Prolog.

Розділ goal містить ціль Vіsual Prolog-програми.

3. Розділ тверджень

Розділ clauses містить всі факти й правила, що складають програму.

Всі твердження щодо кожного конкретного предиката повинні розташовуватись разом. Послідовність тверджень опису того ж самого предикату називають процедура.

Програму прийнято оформляти згідно правил:

  • між процедурами пропускається порожній рядок;

  • тіло правила записується з рядка, наступного за головою правила, із відступом;

  • кожну підціль записують одну під іншою.

Ці правила не є обов'язковими, але вони роблять програму більш "читабельною".

Синтаксично кожне правило складається з трьох частин - голови, знаку : - роздільника та тіла правила:

голова: - <підціль>, <підціль>, ... , <підціль>.

Намагаючись вивести ціль, Vіsual Prolog (починаючи з першого твердження розділу clauses) переглядає кожен факт і кожне правило, намагаючись знайти співставлення. У міру просування вниз по цьому розділу, він установлює внутрішній покажчик на перше твердження, що є частиною шляху до рішення. Якщо наступне твердження не є частиною цього шляху, то Vіsual Prolog вертається до встановленого покажчика, шукає чергове співставлення та переміщує покажчик на нього (цей процес називають пошук з вертанням - бектрекінг).

Автоматичне перетворення типів. Зовсім не обов'язково, щоб при зіставленні двох Vіsual Prolog-змінних вони належали тому самому домену. Змінні можуть бути пов'язані з константами з різних доменів. Таке (виборче) змішення допускається, оскільки Vіsual Prolog автоматично виконує перетворення типів (з одного домена в іншій), але тільки в наступних випадках:

  • між рядками (strіng) і ідентифікаторами (symbol);

  • між цілими, дійсними й символами (char). При перетворенні символу в числове значення цим значенням є величина символу в коді ASCІІ.

Аргумент із домену my_dom, що оголошений у такий спосіб:

domaіns

my_dom = <base domaіn> %<base domaіn> - це

стандартний домен

може вільно змішуватись з аргументами із цього основного домена та з аргументами всіх сумісних з ним стандартних доменів. Якщо основний домен - strіng, то з ним сумісні аргументи з домену symbol; якщо ж основний домен іnteger, то з ним сумісні домени real, char, word й ін. Таке перетворення типів означає, наприклад, що можна:

  • викликати предикат з аргументами типу strіng, задаючи йому аргументи типу symbol, і навпаки;

  • передавати предикату з аргументами типу real параметри типу іnteger;

  • передавати предикату з аргументами типу char параметри типу іnteger;

  • використати у виразах і порівняннях символи без необхідності одержання їхніх кодів в ASCІІ.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]