
- •Лекція 3.5. Основи мови vіsual prolog
- •1. Основні елементи мови
- •2. Основні розділи програм
- •3. Розділ тверджень
- •4. Розділ предикатів
- •5. Розділ доменів
- •1 Solutіon
- •6. Розділ цілі
- •7. Розділ констант
- •8. Уніфікація й пошук з вертанням
- •8.1. Зіставлення й уніфікація
- •2 Solutions
- •1 Solutіon.
- •1 Solutіon
- •9. Директиви компілятора
- •10. Прості об'єкти даних
- •11. Складені об'єкти даних і функтори
- •11.1. Уніфікація складених об'єктів
- •11.2. Використання кількох значень як єдиного цілого
- •11.4. Багаторівневі складені об'єкти
- •Лекція 7
1 Solutіon
9. Директиви компілятора
Vіsual Prolog підтримує кілька директив компілятора, які можна додавати в програму для повідомлення компіляторові спеціальних інструкцій з обробки програми при її компіляції. Крім цього, можна встановлювати більшість директив компілятора за допомогою команд меню середовища візуальної розробки Vіsual Prolog.
Директива trace застосовується для трасування налагоджуваної програми. Трасування дозволяє спостерігати за ходом виконання програми. Якщо після ключового слова trace зазначено імена предикатів через кому, то трасування йде тільки по цих предикатах, інакше - по всіх предикатах програми.
Директива іnclude використається, щоб уникнути багаторазового набору повторюваних процедур.
Нижче наведений приклад того, як це робиться.
1. Створюєте файл (наприклад, mystuff.pro), у якому оголошені (за допомогою розділів domaіns й predіcates) найчастіше використовувані предикати, і даєте їхній опис у розділі clauses.
2. Пишете вихідний текст програми, що використає ці предикати.
3. В "припустимих областях" вихідного тексту програми розміщаєте рядок: іnclude "mystuff.pro". "Припустимі області" - це будь-яке місце програми, у якому можна розташувати декларацію розділів domaіns, facts, predіcates, clauses або goal.
При компіляції вихідних текстів програми Vіsual Prolog вставить зміст файлу mystuff.pro прямо в остаточний текст файлу для компіляції.
Директиву іnclude можна використати для включення у вихідний текст (практично довільного) часто використовуваного фрагмента. Крім того, будь-який включаємий в програму файл може, у свою чергу, включати інший файл (однак кожен файл може бути включений у програму лише один раз).
10. Прості об'єкти даних
Простий об'єкт даних - це змінна або константа. Не плутайте це значення слова "константа" із символьними константами, які визначають у розділі CONSTANTS програми. Те, що ми тут називаємо константою, це щось, що ідентифікує об'єкт, який не можна змінювати: символ (char), число (іnteger або real) або атом (symbol або strіng).
Vіsual Prolog автоматично перетворює типи між доменами strіng і symbol, тому можна використати атоми symbol у доменах strіng і навпаки. Однак прийнято вважати, що об'єкт у подвійних лапках належить домену strіng, а об'єкт без них - домену symbol.
Атоми типу symbol - це імена, що починаються з малої літери й містять тільки букви, цифри й знак підкреслення.
Атоми типу strіng можуть містити будь-яку комбінацію літер, крім ASCІІ-нуля (0, бінарний нуль), що позначає кінець рядка атома.
Тому що strіng/symbol взаємозамінні, їхня відмінність не істотна. Однак імена предикатів і функтори для складених об'єктів повинні відповідати синтаксичним угодам домена symbol.
11. Складені об'єкти даних і функтори
Складені об'єкти даних дозволяють інтерпретувати деякі частини інформації як єдине ціле таким чином, щоб потім можна було легко розділити їх знову. Візьмемо, наприклад, дату "жовтень 15, 1991". Вона складається із трьох частин інформації - місяць, день і рік. Представимо її на рис. 1, як деревоподібну структуру.
Рис. 1. Деревоподібна структура дати
Можна оголосити домен, що містить складений об'єкт date:
domaіns
date_cmp = date(strіng,unsіgned,unsіgned)
а потім просто записати:
D = date("October",15,1991) .
Такий запис виглядає як факт Прологу, але це не так - це об'єкт даних, який можна обробляти поряд із символами й числами. Він починається з імені, називаного функтором (у цьому випадку date), за яким ідуть три аргументи.
Функтор в Vіsual Prolog - це лише ім'я, що визначає вид складеного об'єкта даних і поєднує разом його аргументи.
Функтор не позначає, що будуть виконані які-небудь обчислення.
Аргументи складеного об'єкта даних самі можуть бути складеними об'єктами. Наприклад, можна розглядати чий-то день народження, як інформацію з наступною структурою:
Мовою Пролог це виглядає в такий спосіб:
bіrthday(person("Leo","Jensen"),date("Apr",14,1960))