logo

Програми Prolog

Використання вбудованих предикатів, послідовності цілей або вказівка ​​цілі в системній підказці мало б значення саме по собі. Щоб написати програму Prolog, спочатку користувач має написати програму, написану мовою Prolog, завантажити цю програму, а потім вказати послідовність однієї або кількох цілей у запиті.

Щоб створити програму в Prolog, простим способом є введення її в текстовий редактор, а потім збереження як текстовий файл, наприклад prolog1.pl .

Наступний приклад показує просту програму Prolog. Програма містить три компоненти, які називаються пунктами. Кожне речення закінчується крапкою.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Використання вбудованого предиката ' консультуватися' , наведену вище програму можна завантажити в систему Prolog.

?-consult('prolog1.pl').

Це показує, що файл prolog1.pl існує, а програма прологу є системно правильною, що означає, що вона має дійсні пункти, мета буде виконана, і щоб підтвердити, що програму було правильно прочитано, вона створює один або кілька рядків виводу. наприклад,

?-
# 0,00 секунд для перегляду prolog1.pl
?-

як знайти приховані програми на android

Альтернативою «консультації» є «Завантажити», яка буде доступна в пункті меню, якщо система Prolog має графічний інтерфейс користувача.

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

Термінологія

У наступній програмі три рядки показують пропозиції.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Використовуючи крапку, кожне речення буде закінчено. Програми Prolog мають послідовність пунктів. Факти або правила описуються цими пунктами.

Приклад факти є собака (ротвейлер) і кіт (манчкін) . вони означають, що ' ротвейлер це собака' і ' манчкін це кіт'.

Собака називається присудком. Собака містить один аргумент. Слово ' ротвейлер у дужках (). Ротвейлера називають атомом.

Прикладом правила є заключний рядок програми.

 animal(A) :- dog(A). 

Символ двокрапки (:-) читатиметься як «якщо». Тут A є змінною, і вона представляє будь-яке значення. Природним чином правило можна прочитати так: «Якщо А — тварина, то А — собака».

Наведене вище положення показує, що ротвейлер це тварина. Такий висновок також може зробити Пролог:

?- тварина (ротвейлер).
так

Щоб мати на увазі це манчкін є твариною, доказів цього немає.

?- тварина (манчкін).
Немає

Більше термінології

Оцінка цільового терміну визначає, чи виконано воно. Це також означає, що мета оцінюється як істинне або хибне.

Зауважте, що коли користувач вводить ціль, іноді це можна інтерпретувати як команду. Наприклад,

?- зупинка. 'Він використовується для виходу з системи Prolog.'

Іноді це можна розглядати як запитання на зразок,

?- тварина (ротвейлер). & «Чи є ротвейлер твариною?»

Наступна програма показує інший приклад про тварин. Він складається з восьми пунктів. Коментар відображається всім текстом між /* і */.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

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

?- консультація ('animals1.pl'). Системна підказка
# 0,01 секунди для консультації animals.pl animals.pl завантажується за допомогою консультації

?- собака (ротвейлер).
так

?- собака (боксер).
Немає

?- собака(А).
A = ротвейлер робить паузу - користувач натискає кнопку повернення

?- собака(В).
Б = ротвейлер; паузи ? преси користувача ;
B = пудель; паузи ? преси користувача ;
B = бульдог; паузи ? преси користувача ;
B = доберман Без паузи? Він перейде на наступний рядок

?- кіт(А). А = сфінкс; пауза ? преси користувача;
A = Бенгальські паузи? користувач натискає кнопку повернення

?- слухає(собака). У ньому буде перераховано всі речення, які визначають предикат dog

/* собака/1 */

собака (ротвейлер).
собака (пудель).
собака (бульдог).
собака (доберман).
так
?-

У цьому прикладі введено різні нові функції Prolog. Запит виглядає наступним чином:

?- собака(А).

Це означає, що знайдіть значення А, і це буде ім'я собаки. Відповідь Прологу така:

А = ротвейлер

Інші можливі відповіді А: пудель, бульдог, доберман. Це призведе до призупинення Прологу, і через це ми повинні чекати, поки користувач натисне клавішу «return», перш ніж він виведе системне підказку ?-.

Ми можемо ввести наступний запит наступним чином:

?- собака(В).

Цей запит такий самий, як і попередній. Наведений вище запит означає, що «знайдіть значення B, і це буде ім’я собаки». Відповідь Прологу така:

B = ротвейлер

алгоритм бінарного пошуку

Пролог знову призупиниться. Цього разу користувач натискає клавішу крапки з комою (;). Тепер Пролог знайде альтернативне значення B, яке задовольняє мету dog(B). Він відповість наступним чином:

B = пудель

Пролог знову призупиниться. Користувач знову натискає клавішу крапки з комою (;). Пролог створює наступне рішення наступним чином:

B = бульдог

Пролог знову призупиниться. Користувач знову натискає клавішу крапки з комою (;). Пролог створює наступне рішення наступним чином:

B = доберман

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

У цьому прикладі представлено новий вбудований предикат. Конкретизація мети

?- список (собака)

У наведеній вище меті Prolog перерахує всі чотири пропозиції, які визначають предикат dog. Вони будуть визначені в тому ж порядку, що й завантажені в базу даних.

Використання змінних у запиті показано на наступному прикладі. Послідовність досягнення мети така:

?-кішка(А),собака(В).

Це дасть нам усі можливі комбінації кота та собаки.

?-кішка(А),собака(В).
А = сфінкс,
Б = ротвейлер;

А = сфінкс,
B = пудель;

А = сфінкс,
B = бульдог;

А = сфінкс,
B = доберман;

тощо

Навпаки, послідовність цілі така:

?-кішка(А), собака(А).

Java 8

Це дасть усі тварини, які є і кішкою, і собакою (у базі даних такої тварини немає). Тут A є «будь-яким значенням» у cat(A) і dog(A), але обидва мають мати однакове значення.

?-кішка(А),собака(А).
Немає