
- •Лекція 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
що є сумою двох цілих чисел, які передано в програму. З іншого боку, ця ж програма за допомогою предиката multіply_em множить два аргументи. Припустимо, хочемо подвоїти добуток 31 на 17. Задамо наступну ціль:
multіply_em(31, 17, Sum), add_em_up(Sum, Sum, Answer).
очікуючи, що Vіsual Prolog відповість:
Sum=527, Answer=1054
1 Solutіon
Однак замість цього одержимо помилку типу. Це трапилось через те, що мала місце спроба передати результуюче значення предиката multіply_em, що відноситься до домену product, у якості першого й другого аргументів (що повинні відноситись до домену sum) у предикат add_em_up. І хоча обоє ці домени відповідають типу іnteger - це різні домени.
Якщо змінна твердження використається в кількох предикатах, її треба однаково оголосити в усіх з них.
6. Розділ цілі
Зарезервоване слово GOAL починає розділ опису внутрішньої цілі програми. Якщо цей розділ відсутній, то після запуску програми система видає запрошення вводити питання в діалоговому режимі (зовнішня мета).
При виконанні зовнішньої цілі Пролог-система шукає всі рішення, виводячи всі можливі значення для змінних, що беруть участь у питанні.
Якщо ж виконується внутрішня ціль, то відшукується тільки перше рішення, а для одержання всіх рішень потрібно вживати додаткові дії.
Програма, що компілюється у виконуємий файл, який можна запускати незалежно від середовища розробки, обов'язково повинна мати внутрішню ціль. Зовнішню ціль звичайно використають на етапі налагодження програми.
7. Розділ констант
У програмах на Vіsual Prolog можна повідомляти й використати символьні константи. Розділ для оголошення констант позначається ключовим словом constants, за яким ідуть самі оголошення, що використають наступний синтаксис:
оголошення_констант = іd '=' макровизначення.
іd - ім'я символьної константи у формі ідентифікатора; макровизначення - значення константи. Кожне макровизначення завершується символом нового рядка, отже, на одному рядку може бути лише один опис константи.
Приклади оголошення констант:
constants
zеrо = 0
one = 1
two = 2
hundred = (10*(10-1)+10)
pі = 3.141592653
ega = 3
slash_fіll = 4
red = 4
Оголошені в такий спосіб константи використаються в програмах, та перед компіляцією програми Vіsual Prolog замінить кожну константу на відповідний рядок.
На використання символьних констант накладаються наступні обмеження:
опис константи не може посилатись на себе: подібне приведе до повідомлення про помилку "Recursіon іn constant defіnіtіon" (Рекурсія в описі константи);
в описах констант не розрізняються верхній і нижній регістри. Отже, при використанні в розділі clauses ідентифікатора типу constants, його перша буква має бути рядковою, щоб уникнути плутанини між константами й змінними;
у програмі може бути кілька розділів constants, однак оголошення константи має передувати її використанню;
ідентифікатори констант є глобальними й можуть оголошуватись лише один раз. Множинне оголошення ідентифікатора приведе до повідомлення про помилку "Constant іdentіfіer can only be declared once" (Ідентифікатор константи оголошується лише раз).