Основи мови visual prolog

Основи мови Visual Prolog

1.1 Програмування в логіці

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

Пролог базується на пропозиціях Хорна, що є підмножиною формальної системи, яку називають логікою предикатів. Логіка предикатів - це найпростіший спосіб пояснити, як «працює» мислення, і вона простіше, ніж арифметика, яку ви давно користуєтеся. Пролог використовує спрощену версію синтаксису логіки предикатів.

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

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

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

Пропозиції на природній мові

Синтаксис логіки предикатів

Біллу подобається машина, якщо машина гарна

likes (Bill, car) if fun (car)

Факти і правила

При складанні програми на мові Пролог необхідно описати об'єкти (objects) і відносини (relations), а потім - правила (rules), при яких ці відносини є істинними.

Bill likes dogs.

цю пропозицію встановлює відношення між об'єктами Bill і dogs; цим ставленням є likes. Правило, що визначає, коли пропозиція є істинним, може виглядати так:

Bill likes dogs if the dogs are nice.

Відношення між об'єктами називається фактом (fact). Факти - це відносини або властивості, про які відомо, що вони мають значення «істина». Ставлення складається з імені відносини і об'єкта або об'єктів, укладених в круглі дужки. Як і пропозицію, факт закінчується крапкою.

Факти крім відносин можуть висловлювати і властивості:

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

Cindy likes everything that Bill likes.

За цим правилом виходить, що

Cindy likes dogs.

На Пролозі синтаксис у правил буде іншим:

likes (cindy, Something): - likes (bill, Something).

Символ: - має сенс «якщо», і служить для поділу двох частин правила: заголовка і тіла. Тема - це факт, який був би істинним, якби були б істинними кілька умов. Це називається висновком або залежним ставленням. Тіло - це ряд умов, які повинні бути істинними, щоб Пролог міг довести, що заголовок правила правдивий.

Правило може розглядатися як процедура. У нашому випадку це виглядає так: «Щоб довести, що Сінді любить щось, доведіть, що Білл любить це». З такою процедурної точки зору правила можуть наказувати виконання будь-яких дій, відмінних від доказів фактів, - надрукувати що-небудь або створити файл.

Лише один раз задавши кілька фактів, ми можемо задавати питання, що стосуються відносин між ними. Це називається запитом (query) системи мови Пролог. Пролог завжди шукає відповідь на запит, починаючи з першого факту, і перебирає всі факти, поки вони не закінчаться.

У другому випадку другий об'єкт - What - починається з великої літери, тоді як перший об'єкт - cindy - з малої. Це відбувається тому, що cindy - фіксований, постійний об'єкт, відома величина, а What - змінна.

Отримавши запит про те, що любить Сінді, Пролог відповість:

Запити (цілі) можуть бути простими або складними. Складними називаються цілі, що складаються з двох або більше частин. А кожна частина складної мети - підцілі. Можливе використання кон'юнктівной і диз'юнктивній форми об'єднання подцелей. В якості роздільників використовуються знаки. і; відповідно.

Складові мети можна використовувати для пошуку рішення, в якому:

ü обидві подцели A і B істинні (сполучення), розділяючи подцели коми:

ü істинна або подцель A, або подцель B (диз'юнкція), розділяючи подцели крапкою з комою.

Змінні в Пролозі завжди починаються з великої літери або символу підкреслення.

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

Не можна зберегти інформацію, присвоївши значення змінної. Змінні використовуються як частина процесу пошуку рішення, а не як сховище інформації.

На цьому прикладі зручно спостерігати як серед фактів виділяється той, у якого другий аргумент - reading, а змінна Person спочатку зв'язується зі значенням ellen і за списком фактів шукає факт, відповідний другій частині запиту: likes (ellen, swimming). Оскільки такого факту немає, то Пролог серед фактів виділяє наступний факт у якого другий аргумент - reading, тобто likes (eric, reading) і змінна Person зв'язується зі значенням eric. Далі за списком фактів шукає факт, відповідний другій частині запиту: likes (eric, swimming). І, оскільки даний факт має місце бути, то Пролог видає відповідь:

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

Анонімні змінні можуть використовуватися і в фактах Прологу. Наприклад, факти:

Можуть бути виражені засобами природної мови: У кожного є рот. Всі п'ють.

Анонімні змінні зіставляються з будь-якими даними.

articles = book (string Title, string Author)

likes (string Uppercase, string Lowercase)

Програми Visual Prolog

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

- розділ domains (доменів);

- розділ predicates (предикатів);

- розділ clauses (пропозицій);

- розділ goal (цілей).

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

Розділ предикатів. Тут перераховуються всі предикати, відмінні від стандартних (вбудованих в VP) і використовувані в програмі. Предикати повинні бути перераховані із зазначенням типів (доменів) їх аргументів.

1) ім'я предиката - послідовність латинських букв, цифр і символу підкреслення, що починається з великої літери. Довжина імені не може бути більше 250 символів. В іменах заборонено використовувати такі символи, як пробіл, -, * і т.п .;

2) списку доменів (типів) аргументів предиката, укладеного в круглі дужки.

На відміну від пропозицій розділу clauses опис предиката не закінчується точкою. Доменами (типами) аргументів можуть бути або стандартні домени, або домени, оголошені в розділі domains.

Арность предиката - це кількість аргументів, які він приймає. У програмі можна використовувати два предиката з одним і тим же ім'ям, але відрізняються арность.

Розділ доменів. Якщо предикат my_predikate (symbol, integer) оголошений в розділі predicates наступним чином:

my_predikate (symbol, integer)

my_predikate (name, number),

то вище треба описати в розділі доменів

Домени дозволяють задавати різні імена різних видів даних.

imya, pol = symbol

person (imya, pol, vozrast)

rovesnik (X, Y): - person (X, Pol, Let), person (Pol, Y, Let)

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

короткий, знакова, кількісне

Схожі статті