Факти. Запити до БД

Факт - це твердження про те, що дотримується деяке конкретне відношення. Це твердження завжди істинно

Факт - фраза без умов. Факт використовується для того, щоб показати простий взаємозв’зок даних. Факт складається з імені предиката й списку аргументів (термів), ув'язнених у дужки.

Тільки програміст вирішує як назвати предикат. Бажано, щоб ім’я було максимально наближене до природної мови. Вибирається ім’я, що найкраще відбиває певний вид взаємозв’язку між аргументами. Наприклад, фразу "жаба є переможцем у стрибках у висоту" можна на Пролозі виразити наступним фактом:

winner(high_Jumping,frog).

Тут у прикладі термами є атоми. Ім’я предиката -winner.

Перший символ імені предиката обов’язково повинен бути малою літерою латинського алфавіту, наступні - буквами латинського алфавіту, цифрами або символом ‘_’. Будь-які інші символи неприпустимі.

Атом - константа, синтаксис якої аналогічний синтаксису імені предиката.

Кількість аргументів у предиката не обмежено.

Запуск Пролог-Програми здійснюється запитами. Один факт уже є пролог-програма, і до нього можна звертатися із запитами.

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

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

Приклади запиту до наявному в нас факту можна записати такими способами:

?- winner(high_Jumping,frog).

yes

Трактування запиту: “чи Є жаба переможцем у стрибках у висоту?”. Відповідь ‘yes’ говорить про те, що запит успішний. Отже, “Так, є”.

?- winner(high_Jumping,X).

X = frog ->

yes

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

Після символів -> натискаємо <enter>, що означає відмову від пошуку інших конкретизацій змінної X. Трактування запиту: “Хто є переможцем у стрибках у висоту?”. Відповідь полягає в одержанні конкретизації змінної X – “переможцем у стрибках у висоту є жаба”.

Виконання запиту: інтерпретатор намагається уніфікувати (зв'язати) аргументи запиту з аргументами фактів, що входять у БД. Змінна конкретизується, коли при виконанні запиту вона уніфікується з деяким значенням.

Розглянуті запити були простими. У командному рядку інтерпретатора можна задати складений запит:

?- Y=high_Jumping, winner(Y,frog).

Y = high_Jumping ->

yes

Запит: “Вид змагань - стрибки у висоту” і “Чи Є жаба переможцем у цьому виді змагань?”. Відповідь: “Так, є”.

У синтаксисі Прологу символ “,” означає логічне “і”, символ “;” - логічне “або”.

Елементарна пролог-програма може мати вигляд:

% Програма 1.1: переможець (назва змагання, ім'я).

winner (high_Jumping, frog).

winner (long_Jumping, kengaroo).

Символ % означає, що наступний за ним запис до кінця рядка є коментар. Цей символ може стояти як на початку рядка, так і після деякого предиката. Коментарем також уважається інформація, укладена в символи /* і */. Місце розташування такого коментарю не регламентується.

Прості запити до програми 1.1.

?- winner(X,kengaroo).

X = long_Jumping ->

yes

Запит: “Переможцем у якому виді змагань є кенгуру?” Відповідь: “У стрибках у довжину”.

?- winner(Y,_).

Y = high_Jumping ->;

Y = long_Jumping ->;

no

Символ підкреслення “_” виступає в якості анонімної змінної, котра пропонує інтерпретаторові проігнорувати значення аргументу. Анонімна змінна уніфікується із чим завгодно. Уведення; ("або") після символів -> означає наказ інтерпретаторові передовести запит для одержання нової конкретизації змінної.

Запит: “У яких видах змагань виявлялися переможці?” Відповідь: “У стрибках у висоту”.

Альтернативна відповідь: “У стрибках у довжину”.

Запит неуспішний: “Ніяких інших варіантів ні”.

Інший запит:

?- winner(Z,cat).

no

Запит: “Переможцем у якому виді змагань є кішка?” Запит неуспішний: “Кішка не є переможцем у жодному виді змагань”.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: