Контакти

Введення у мову логічного програмування пролог. Мова логічного програмування пролог Використання prolog у середовищі c

Лекція присвячена розв'язанню задач за допомогою графа простору станів. Простір станів описується як безліч станів – вершин графа, безлічі переходів стану до стану – дуг графа, безлічі початкових станів і безлічі кінцевих станів. Розв'язання задачі подається у вигляді шляху на графі простору станів, що з'єднує початковий стан із кінцевим. Якщо простір станів завдання невеликий, будуть знаходитися всі оптимальні рішення за допомогою пошуку в глибину. У завданнях з великим простором станів обчислюватиметься лише одне оптимальне рішення шляхом пошуку шириною. До завдань застосовуються універсальні вирішувачі. Стани різних завдань можуть належати різним доменам. Для запам'ятовування найкращих серед знайдених рішень використовується "змінна змінна" varM. Компілятор знаходить потрібні типи. Версія Visual Prolog 7.5 ще не опублікована. Її публікація планується у 2014 році, але точна дата поки що не відома. Наразі всім доступна версія Visual Prolog 7.4.

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

У жовтні 1981 року Японське міністерство міжнародної торгівлі та промисловості оголосило про створення дослідницької організації - Інституту розробки методів створення комп'ютерів нового покоління (Institute for New Generation Computer Technology Research Center). Метою даного проекту було створення систем обробки інформації, що базуються на знаннях. Передбачалося, що це системи забезпечуватимуть простоту управління з допомогою можливості спілкування з користувачами з допомогою природної мови. Ці системи повинні були самонавчатися, використовувати знання знання для вирішення різноманітних завдань, надавати користувачам експертні консультації, причому від користувача не вимагалося бути фахівцем в інформатиці. Передбачалося, що людина зможе використовувати ЕОМ п'ятого покоління так само легко, як будь-які побутові електроприлади типу телевізора, магнітофона та пилососа. Незабаром слідом за японським стартували американський та європейський проекти.

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

Тепер уже зрозуміло, що поставленої мети повною мірою так і не було досягнуто, проте цей проект послужив імпульсом до розвитку нового витка досліджень у галузі штучного інтелекту та викликав вибух інтересу до логічного програмування. Оскільки ефективної реалізації традиційна фон неймановская архітектура не підходила, було створено спеціалізовані комп'ютери логічного програмування PSI і PIM .

Як основна методологія розробки програмних засобів для проекту ЕОМ п'ятого покоління було обрано логічне програмування, яскравим представником якого є мова Пролог . Думається, що і в даний час Пролог залишається найбільш популярною мовою штучного інтелекту в Японії та Європі (у США, традиційно, більш поширена інша мова штучного інтелекту – мова функціонального програмування Лісп).

Назва мови "Пролог" походить від слів ЛОГІЧНЕ Програмування(PROgrammation en LOGique у французькому варіанті та PROgramming in LOGic - в англійському).

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

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

У 1965 році в роботі "A machine oriented logic based on the resolution principle", опублікованій у 12 номері журналу "Journal of the ACM", Дж Робінсон представив метод автоматичного пошуку доказу теорем у обчисленні предикатів першого порядку, який отримав назву " принцип резолюціїЦю роботу можна прочитати в перекладі: Робінсон Дж. Машинно-орієнтована логіка, заснована на принцип резолюції// Кібернетичний збірник. - Вип. 7 (1970). Насправді, ідея цього методу була запропонована Ербраном у 1931 році, коли ще не було комп'ютерів (Herbrand, "Une methode de demonstration", These, Paris, 1931). Робінсон модифікував цей метод так, що він став придатним для автоматичного, комп'ютерного використання, і, крім того, розробив ефективний алгоритм уніфікації, що є базисом його методу.

У 1973 році "група штучного інтелекту" на чолі з Аланом Колмерое створила в Марсельському університеті програму, призначену для доказу теорем. Ця програма використовувалася при побудові систем обробки текстів природною мовою. Програма підтвердження теорем отримала назву Prolog (від Programmation en Logique). Вона і стала прообразом Прологу. Ходять легенди, що автором цієї назви була дружина Алана Колмерое. Програма була написана на Фортрані та працювала досить повільно.

Велике значення у розвиток логічного програмування мала робота Роберта Ковальського " Логіка предикатівяк мова програмування(Kowalski R. Predicate Logic as Programming Language. IFIP Congress, 1974), в якій він показав, що для того, щоб домогтися ефективності, потрібно обмежитися використанням безлічі хорнівських диз'юнктів. До речі, відомо, що Ковальський та Колмерое працювали разом протягом одного літа.

У 1976 р. Ковальський разом із його колегою Маартеном ван Емденом запропонував два підходи до прочитання текстів логічних програм: процедурний та декларативний. Про ці підходи йтиметься у третій лекції.

У 1977 році в Единбурзі Уоррен і Перейра створили дуже ефективний компілятор мови Пролог для ЕОМ DEC-10, який став прототипом для багатьох подальших реалізацій Прологу. Що цікаво,

функціональні;

Процедурні;

Об'єктно-орієнтовані;

Декларативні (реляційні).

Програма, написана на функціональною мовою, Виражає алгоритм вирішення задачі в термінах значень, які повертають функції. Таким чином, програма представляє набір функцій, кожна з яких повертає лише одне значення певного типу. Робота програми (алгоритм розв'язання задачі) є послідовним викликом функцій. До функціональних мов відноситься С.

Програма, написана на процедурною мовою, Виражає алгоритм розв'язання задачі в термінах дій (процедур), які необхідно виконати. Відмінність процедури від функції у тому, що процедура може повертати будь-яку кількість значень, зокрема і жодного. Таким чином, робота програми є послідовним викликом процедур. До процедурних мов належать Pascal, Basic і т.д. Слід зазначити, що в будь-якій процедурній мові є можливість визначення та використання функцій, а у функціональній – процедур (функцій, що не повертають значень – зазвичай визначаються з модифікатором void).

Програма, написана на об'єктно-орієнтованою мовою, являє собою набір об'єктів, що взаємодіють між собою за допомогою надсилання повідомлень. Кожен об'єкт характеризується інформаційною складовою (набором атрибутів) та поведінковою (набір подій та методів). Робота програми є послідовним обміном повідомленнями (виклик методів) між об'єктами. До об'єктно-орієнтованих мов відносяться Object Pascal, Visual Basic, C++, Java і т.д. Слід зазначити, що у будь-якій об'єктно-орієнтованій мові є можливість процедурного програмування.

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

Програма, написана на декларативною мовою, є опис предметної області через набір відносин (англ. relation) між об'єктами (сутностями) і формулювання мети (завдання), яку потрібно вирішити. На відміну від перелічених вище мов, така програма не має явного опису послідовності дій, необхідні рішення завдання. Як правило, процедура пошуку рішення виконується автоматично з використанням відповідного математичного або логічного апарату, що лежить в основі мови та реалізована у його конкретному інтерпретаторі 1 (компіляторі 2). До декларативних мов належать Prolog, SQL тощо. Таким чином, безперечною перевагою декларативних мов є концентрація уваги розробника на тому, що треба зробити, а не як.

Інша класифікація мов програмування заснована на стилі програмування :

- імперативні– програма є послідовністю операторів (команд, що виконуються комп'ютером), за допомогою яких програміст повинен пояснити комп'ютеру, як потрібно вирішувати завдання(функціональні, процедурні та об'єктно-орієнтовані мови програмування);

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

Відома класифікація мов програмування з їхньої близькості до машинного, або до природної людської мови. Ті, що ближче до комп'ютера, відносять до мов низького рівня (Ассемблер), а ті, що ближче до людини називають мовами високого рівня (Basic, Pascal, Java і т.д.). У цьому сенсі декларативні мови можна назвати мовами надвисокого чи найвищого рівня, оскільки вони дуже близькі до людської мови та людського мислення.

У 1965 році в роботі «A machine oriented logic based on the resolution principle» 3 , опублікованій у 12 номері журналу Journal of the ACM, Дж Робінсон представив метод автоматичного пошуку доказу теорем у обчисленні предикатів першого порядку, що отримав назву «принцип резолюції». Насправді, ідея цього методу була запропонована Ербраном у 1931 році, коли ще не було комп'ютерів (Herbrand, Une methode de demonstration, These, Paris, 1931). Робінсон модифікував цей метод так, що він став придатним для автоматичного (комп'ютерного) використання та розробив ефективний алгоритм уніфікації, що становить базис його методу.

Ідеї ​​використання логіки як мову програмування зародилася на початку 1970-х років. Першими дослідниками, які зайнялися розробкою цієї ідеї, були Роберт Ковальскі (Robert Kowalski) з Единбурга (теоретичні основи, статті 1971 та 1974 р.), Маартен ван Емден (Maarten van Emden) з Единбурга (експериментальна демонстраційна система) та Альон Colmerauer) з Марселя (реалізація, 1973). У 1973 році «група штучного інтелекту» на чолі з Альоном Колмерое створила в Марсельському університеті програму, призначену для доказу теорем. Ця програма використовувалася при побудові систем обробки текстів природною мовою. Програма доказу теорем отримала назву Prolog (фр. PROgrammation en LOGique) і послужила прообразом Прологу. Ходять легенди, що автором цієї назви була дружина Олена Колмерое. Програма була написана на Фортрані та працювала досить повільно.

Популяризації Прологу багато в чому сприяли:

Ефективна реалізація (інтерпретатор/компілятор) цієї мови для ЕОМ DEC-10 Девідом Д. Г. Уорреном (David D.H. Warren) з Единбурга в 1977 р. стала прототипом для багатьох подальших реалізацій Прологу. Що цікаво, компілятор був написаний на Пролозі. Ця реалізація Прологу, відома як «единбурзька версія», фактично стала першим та єдиним стандартом мови;

Розробка Кларком та Маккейбом (Великобританія) у 1980 році версії для персональних ЕОМ;

Японський проект створення комп'ютерів V покоління. Наприкінці 1978 р. Міністерство зовнішньої торгівлі та промисловості (МВТП) Японії доручило розробити проект інтелектуальних ЕОМ, спеціально створеному з цією метою Токійському інституту обчислювальної техніки (ICOT) 4 . Серцем цих комп'ютерів мав стати не арифметичний процесор, а спеціально оптимізований до роботи з прологоподобными програмами.

У 1995 році був опублікований офіційний стандарт ISO 5 / IEC 6 мови Пролог (ІSO / IEC 13211-1 "Information technology - Programming languages ​​- Prolog - Part 1: General core" - "Інформаційні технології. Мови програмування. Пролог. Частина 1. Загальне ядро»).

На сьогодні існує чимало реалізацій Прологу. Найбільш відомі з них такі: BinProlog, AMZI-Prolog, Arity Prolog, CProlog, Micro Prolog, MProlog, Prolog-2, Quintus Prolog, SICTUS Prolog, Silogic iis Workbench, Strawberry Prolog, SWI-Prolog, Turbo Prolog (PDC Prolog, Visual Prolog), UNSW Prolog і т. д. У нашій країні були розроблені такі версії Прологу як Пролог-Д (С. Григор'єв), Акторний Пролог (А. Морозов), а також Фленг (А. Манцивода, В. Пєтухін).

5. Дайте визначення поняттям: , , .

9. Що розуміється під " " і " " списку?

Поява "Прологу" була зумовлена ​​розвитком логіки, математики та програмування. Останнє зіграло найважливішу роль. Фахівці з логіки та математики спробували поставити програмування на «правильний шлях», але розвиток інформаційних технологій показав зовсім інший результат.

Прагматичне імперативне програмування виявилося перспективнішим. "Пролог" як мова програмування відбувся, але основою штучного інтелекту не став.

Класичне програмування проти логіки

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

Цей факт завжди давав примарну підставу вважати створення інструменту прийняття рішень простою справою. З появою "Прологу" здавалося: питання штучного інтелекту - справа техніки, і людина розумна вигадала три закони робототехніки. Проте штучний інтелект так і залишився примарою, а три закони робототехніки виявилися з казки – «зроби те, не знаю що».

Програмування в класичному значенні цього слова (часто використовують терміни "процедурне", "імперативне" або "функціональне") розвивалося та успішно подолало «смутні часи» 80-90-х років, коли мов програмування була незліченна кількість.

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

Не можна сказати, що "Пролог" як мова програмування не розвивався. Але він не досягнув зазначених цілей. Сьогодні можна не лише сказати, а й обґрунтувати: "Пролог" - це академічна мова для:

  • цілей навчання;
  • логіки предикатів;
  • математики;
  • вузького застосування.

Сумнівно, що це твердження можна спростувати. Штучний інтелект - це не тільки широке застосування, але й надто серйозна подія, що кардинально змінює суспільний устрій та картину світу.

Програмування мовою "Пролог" для штучного інтелекту не відбулося: за більш ніж сорокарічну історію мови не було жодної кардинально нової, актуальної для суспільної свідомості події, що свідчить про інше.

Об'єктивна реальність така: виживає не так сильне, як затребуване та актуальне.

"Пролог" - мова декларативного програмування

Мати інструмент опису фактів та правил - добре, але який сенс? Факти та правила чудово лягають у звичайну базу даних. Кваліфікований класичний програміст надає інтерактивний діалог для користувача і останній вирішує свої завдання.

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

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

"Пролог" як мова програмування - це факти:

  • мама (Марія, Наталя); - Марія – мама Наташі;
  • тато (Євген, Марина); – Євген – тато Марини.

Тут відразу за бортом виявляється факт: «Марія» та «Марина» – різні імена. Нічого не заважає дописати факт:

  • тато (Євген, Марія); – Євген – тато Марії.

Ці описи дають життя правилам:

  • батько (x, y)<- папа (x, y);
  • батько (x, y)<- мама (x, y);

Але не дозволяють зробити висновок, що тато – батько Марини, а Марина – мама Марії. Ця проблема можна вирішити, можна дописати ще одне правило, додати ще один факт. Але скільки таких дій слід зробити в реальній ситуації?

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

Сімейство "Прологів"

Франція вважається батьківщиною "Прологу", а 1973 - роком народження. Інтерес до мови періодично відновлювався, але із завидною стабільністю затихав. Девіз мови: Логіка предикатів - це елементарно! Це спосіб пояснити, як працює мислення» - так і лишився девізом.

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

Будь-яке програмування – це дані та їх обробка. Конструкції мови повинні максимально точно описувати вирішуване завдання, тому всі відомі реалізації "Прологу": Turbo Prolog, Win Prolog, SWI Prolog, GNU Prolog, Visual Prolog та інші - містять, крім декларативних конструкцій, звичайні імперативні висловлювання.

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

Основа штучного інтелекту

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

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

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

На початку 90-х років було успішно реалізовано проект реальної інтелектуальної системи, що моделює поведінку дитини віком до 3-х років на ЄС ЕОМ! Варіант використання "Прологу" навіть не розглядався.

Ця інтелектуальна система не тільки «розуміла», що таке мама, тато, і чим відрізняється Марія від Марини, але й без особливої ​​напруги самостійно перескочила з набутих знань з цих питань до м'ячиків та їх відмінностей від кубиків, до квітів предметів і... (!) До елементарної математики: прості арифметичні операції виявилися їй під силу на підставі знань, набутих при вирішенні зовсім інших завдань.

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

Що ж до інтелекту як завдання - мабуть, питання тут лежить над мові, а ідеї реалізації. Якщо асемблер 1991 року зміг стати основою для інтелектуальної системи ситуативного інтелекту, то питання явно лежить не в мові реалізації, а в ідеї.

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

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

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

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

Таблиця 1.Синтаксис логіки предикатів

2. Факти

На Пролозі описуються об'єкти (objects) та відносини (relations), а потім описує правила (rules), у яких ці відносини є істинними. Наприклад, пропозиція

Білл любить собак. (Billlikesdogs.)

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

Білл любить собак, якщо собаки добрі. (Bill likes dogs if the dogs are nice.)

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

Нижче представлено кілька пропозицій природною мовою із ставленням "любить" (likes):

Білл любить Сінді. (Bill likes Cindy)

Сінді любить Білла. (Cindy likes Bill)

Білл любить собак. (Bill likes dogs)

А тепер перепишемо ці ж факти, використовуючи синтаксис Прологу:

likes(bill, cindy).

likes(cindy, bill).

likes (bill, dogs).

Факти, окрім відносин, можуть виражати й властивості. Так, наприклад, пропозиції природної мови "Kermitisgreen" (Керміт зелений) та "Caitlinisgirl" (Кейтлін - дівчинка) на Пролозі, виражаючи ті ж властивості, виглядають так:

3. Предикати

Ставлення в Пролозі називається предикатом. Аргументи- це об'єкти, що пов'язуються цим ставленням; у факті

likes (bill, cindy).

Відношення likes – це предикат, а об'єкти bill та cindy – аргументи.

Приклади предикатів з різним числом аргументів:

pred(integer, symbol)

person (last, first, gender)

birthday(firstName, lastName, date)

У прикладі показано, що предикати можуть не мати аргументів.

4. Правила

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

Сінді любить усе, що любить Білл. (Cindy likes everything that Bill likes)

Кейтлін любить усе зелене. (Caitlin likes everything that is green)

Використовуючи ці правила, ви можете з попередніх фактів знайти деякі речі, які люблять Сінді та Кейтлін:

Сінді любить Сінді. (Cindy likes Cindy)

Кейтлін любить Керміт. (Caitlin likes Kermit)

Щоб перекласти ці правила на Пролог, вам потрібно трохи змінити синтаксис:

likes (cindy, Something): - likes (bill, Something). ilikes (caitlin, Something): - green (Something).

Символ:- має сенс "якщо", і служить для поділу двох частин правила: заголовка та тіла.Можна розглядати правило як процедуру. Іншими словами, правила

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

likes(caitlin, Something): - green (Something).

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

5. Запити (Цілі)

Описавши в Пролозі кілька фактів, можна ставити питання стосовно відносин між ними. Це називається запитом(query) системи мови Пролог. Можна пропонувати такі ж питання, які ми могли б поставити вам про ці відносини. Грунтуючись на відомих, заданих раніше фактах і правилах, ви можете відповісти на питання про ці відносини, так само це може зробити Пролог. На природній мові ми запитуємо: Does Bill like Cindy ? (Білл любить Сінді?)За правилами Прологу ми запитуємо:

likes(bill, cindy).

Отримавши такий запит, Пролог відповість:

тому що Пролог має факт, що підтверджує, що це так. Трохи ускладнивши питання, можна запитати природною мовою: What does Bill like ? (Що любить Білл?)За правилами Прологу ми запитуємо:

likes(bill, What).

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

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

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

Так, як йому відомо, що

likes(bill, cindy).

likes(bill, dogs) .

Якби ми запитали:

What does Cindy like? (Що любить Сінді?)

likes(cindy, What).

то Пролог відповів би:

оскільки Пролог знає, що Сінді любить Білла, і що Сінді любить те саме, що і Білл, і що Білл любить Сінді та собак.

Ми могли б поставити Прологу та інші питання, які можна поставити людині. Але питання типу "Яку дівчину любить Білл?" не отримають рішення, тому що прологу в даному випадку не відомі факти про дівчину, а він не може вивести висновок, заснований на невідомих даних: у цьому прикладі ми не дали прологу будь-якого відношення або властивості, щоб визначити, чи є які або об'єкти дівчат.

6. Розміщення фактів, правил та запитів

Припустимо, є такі факти та правила:

Швидка машина – приємна. (Afastcarisfun).

Велика машина – гарна. (A big car is nice).

Маленька машина – практична. (A little car is practical).

Біллу подобається машина, якщо вона приємна. (Bill likes a car if the car is fun).

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

Ось приклад, який демонструє, як Пролог використовує правила відповіді запити. Подивіться на факти та правила у цій частині програми ch02e01.pro:

likes(ellen, tennis).

likes (John, football).

likes (torn, baseball).

likes (eric, swimming).

likes (mark, tennis).

likes (bill, Activity): - likes (torn, Activity).

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

Біллу подобається заняття, якщо Тому подобається це заняття. (Bill likes an activity if Tom likes that activity)

У цьому правилі заголовок - це likes (bill, Activity), а тіло - likes (torn, Activity). Зауважимо, що в цьому прикладі немає фактів, що Білл любить бейсбол. Щоб з'ясувати, чи любить Білл бейсбол, можна надати Прологу такий запит:

likes (bill, baseball).

Намагаючись знайти рішення з цього запиту, Пролог використовуватиме правило:

Завантажте програму ch02e01.pro у середу візуальної розробки VisualProlog та запустіть її утилітою TestGoal .

likes(symbol,symbol)

likes(ellen, tennis).

likes(John,football).

likes(torn,baseball).

likes(eric,swimming).

likes(mark,tennis).

likes(bill,Activity):-likes(torn, Activity).

likes(bill, baseball).

Утиліта TestGoal відповість у вікні програми:

Система використовувала комбіноване правило

likes (bill, Activity): - likes (torn, Activity).

likes(torn, baseball). для вирішення, що likes(bill, baseball).

Спробуйте також наступний запит у GOAL-розділі:

likes (bill, tennis).

Утиліта Test Goal відповість:

оскільки:

· немає фактів, які кажуть, що Біл любить теніс;

· Відношення Білла до тенісу не може бути логічно виведене з використанням даного правила та наявних фактів.



Сподобалася стаття? Поділіться їй