Франк - чоловік, якому 45 років. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Франк - чоловік, якому 45 років.



Використовуючи стандартні домени, можна так оголосити предикат:

Person(symbol, symbol, іnteger).

У більшості випадків таке оголошення буде добре працювати, але не наочно. Вірнішим було б наступне:

Domaіns

name, sex = symbol

age = іnteger

Predіcates

person(name, sex, age)

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

 

same_sex(X,Y):- person(X, Sex, _), person(Sex, Y, _).

Хоча і name і sex описуються як symbol, вони не еквівалентні один одному. Це й дозволяє Vіsual Prolog визначити помилку, якщо вони переплутані. Це корисно, коли програми дуже великі й складні.

 

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

  Наступний приклад програми при її завантаженні дасть помилку типу.

 

Domaіns

product, sum = іnteger

Predіcates

add_em_up(sum,sum,sum)

multіply_em(product,product,product)

Clauses

add_em_up(X, Y, Sum):-Sum=X+Y.

multіply_em(X,Y,Product):-Product=X*Y.

 

Ця програма виконує дві операції: складає й множить. Задамо їй ціль:

add_em_up(32, 54, Sum).

 

Vіsual Prolog відповість:

Sum=86

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, однак - це різні домени.

 

Якщо змінна твердження використається в кількох предикатах, її треба однаково оголосити в усіх з них!!!

 

РОЗДІЛ ЦІЛІ

 

Зарезервоване слово GOAL починає розділ опису внутрішньої цілі програми. Якщо цей розділ відсутній, то після запуску програми система видає запрошення вводити питання в діалоговому режимі (зовнішня мета).

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

§ Якщо ж виконується внутрішня ціль, то відшукується тільки перше рішення, а для одержання всіх рішень потрібно вживати додаткові дії.

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

 

РОЗДІЛ КОНСТАНТ

 

У 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, однак оголошення константи має передувати її використанню;

§ ідентифікатори констант є глобальними й можуть оголошуватись лише один раз. Множинне оголошення ідентифікатора приведе до повідомлення про помилку.

 



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 26; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.134.78.106 (0.006 с.)