Анотація: Загальна характеристика мови Пролог: бази знань та експертні системи. Об'єкти і терми Прологу: об'єкти Прологу - імена, змінні і списки; основні і неосновні терми; атоми. Факти Прологу: синтаксис фактів; універсальні факти. Правила Прологу: проблема недостатності фактів для опису бази знань; синтаксис правила - заголовок і тіло правила; процедура як об'єднання правил з одним заголовком; програма Прологу як сукупність фактів і правил. Запити Прологу: синтаксис запиту; відповідь на запит без змінних; запит зі змінними і інтерпретація змінних при виконанні програми; приклади програм з запитами для них.
Загальна характеристика мови Пролог
Математична логіка дає нам ясний і точний мову для явного вираження знань, гіпотез і цілей. Можливість машинного доведення теорем. заснованого на спеціальному виведення, названому принципом резолюцій. вперше була отримана Дж. Робінсон в 1965 році. Це призвело до бажання побудувати мову програмування. який дозволив би реалізувати одну з інтелектуальних сторін діяльності людини - проведення міркувань у вигляді програм.
На початку 70-х років минулого століття групою під керівництвом А. Колмерое в Марселі на Фортране була написана програма для доведення теорем. названа Прологом (від Programmation en Logique). Це призвело в кінці десятиліття до розробки мови Пролог і надалі розвитку цієї мови і в цілому напрямки, яке отримало назву логічного програмування.
Мова Пролог близький до моделі Маркова: також основою є пошук підходящої підстановки - інтерпретація змінних. Але підстановки шукаються в правилах мови (аналог Рефаїл-пропозицій), і метою є саме пошук підстановки.
Програма на Пролозі складається з правил. які представляють собою продукції з предикатами (щодо об'єктів) в лівій і правій частині. Тим самим програма Прологу висловлює деякі знання про навколишній світ (задачі або групи завдань), необхідні для вирішення завдань. Правила, що не містять посилки в продукції, називаються фактами. а вся система правил програми утворює базу знань.
Питання завдання, званий запитом. - це також певний предикат. істинністю якого ми цікавимося. Якщо запит не містить змінних. то обчислення його значення дає відповідь "Так" при його істинності або відповідь "Ні" при його хибності. Якщо ж в предикате запиту є змінні. то шукаються їх значення (інтерпретація), при яких цей предикат і все предикати програми стають справжніми. В цьому і полягають обчислення програми на Пролозі.
Так як кожен предикат - це функція. то Пролог є мовою функціонального програмування.
Отже, в мові Пролог розглядаються об'єкти і 3 види тверджень щодо об'єктів: факти, правила і запити. Єдиною структурою даних є терм.
Об'єкти і терми Прологу
Об'єктами Прологу є
- імена (починаються з малої літери), рядки символів (полягають в апострофи) і числа - константні об'єкти або константи; наприклад, автомобіль, будинок, іван, 'a + b'. 'X'. 123;
- змінні - можуть набувати значень інших об'єктів, і ми їх будемо писати прописними латинськими літерами: наприклад, X, A, W;
- списки - їх елементами є будь-які об'єкти; списки ми укладаємо в квадратні дужки, розділяючи елементи комами; наприклад, [] - порожній список (він є константою, ми його будемо позначати також nil і будь-який список завершувати цим елементом, щоб показати кінець списку), [a, b, c, nil] - список, що складається з трьох констант a. b і c; [X, [b, Y, 'X', nil], nil] - список, що складається з двох елементів, перший з яких - змінна X. а другий - список з трьох елементів: імені b. змінної Y і рядки 'X'.
Завершальний список елемент nil можна при записі опускати, маючи на увазі його в необхідних випадках. Для конкатенації (з'єднання) списків і елементів в один список використовується точка як бінарна операція з'єднання лівої частини (голови списку) і правої частини (хвоста списку). У разі операції конкатенації квадратні дужки на нульовому рівні можна опускати. Наприклад, a.X.Y.a при X = b. Y = c є список [a, b, c, a]. також при X = [b]. Y = [c] є той же список. а при X = [b, [d, e]] і Y = [[c]] є список [a, b, [d, e], [c], a].
Тепер индуктивно введемо поняття терма. Термами є об'єкти Прологу. Крім того, термами є складові терми. Складовою терм утворюється з імені функції і списку аргументів (термів Прологу) в круглих дужках. Синтаксично складовою терм має вигляд
де f - ім'я n -арної функтора. а - аргументи.
Прикладами складових термів є: холодний (вода), батько (іван, петро), list (d, list (b, nil)) і bintree (bintree (nil. 7, nil), L, 12).
У першому прикладі складовим термо є висловлювання з ім'ям булевої функції 1 аргументу-константи, яке має логічне значення істина або брехня.
У другому прикладі ставлення "іван є батьком петра" задається як булева функція з 2 аргументами-константами.
У третьому прикладі бінарна функція з ім'ям list і двома аргументами має в якості першого аргументу константний об'єкт d. а в якості другого аргументу - складовою терм з ім'ям тієї ж функції і повертає, по-видимому, список.
У четвертому прикладі функція з ім'ям bintree і трьома аргументами повертає у вигляді списків бінарне дерево з коренем 7, правим сином 12 і лівим сином, який визначається змінної L.
Терми. в які не входять змінні, назвемо основними. а терми. містять змінні, - неосновними. Так, три перших прикладу вище є основними термами. а четвертий приклад - неосновним термо.
У логічному програмуванні основною структурою є предикатна функція, що описується складовим термо, яка має истинностное значення (істина або брехня), можливо залежне від значень аргументів. Такий предикат називається атомарним, або атомом.
Факти - це найпростіші твердження щодо об'єктів програми, які вважаються істинними, т. Е. Мають сенс аксіом програми. Кожен факт оформляється у вигляді атомарного предиката і стрілки вліво, яка знаходиться праворуч від нього. Так, в наступному прикладі
задається, що об'єкти іван і петро є чоловіками. що іван є батьком петра і що двічі два - чотири.
Чому ставиться стрілка? Загальний вигляд запису продукції "якщо A. то B", де A і B - предикати, виражається на Пролозі наступним чином:
Факт не має посилки і читається "то B", т. Е. Твердження B розглядається як істинний факт.
Безліч фактів утворюють найпростішу програму Прологу. Але атомарний предикат факту може містити змінні в якості аргументів або неосновні терми. У цьому випадку за замовчуванням вважається, що доданий квантор загальності зі змінними предиката. Такі факти називаються універсальними. вони істинні для будь-яких значень змінних. наприклад,
означає, що будь-який об'єкт програми "любить яблуко". Універсальні факти скорочують запис програми.