- •4.1. Знання і деякі підходи до їх подання
- •4.2. Вербально-дедуктивне визначення знань
- •4.3. Експертні системи
- •4.4. Дані та знання
- •4.5. Зв'язки між інформаційними одиницями
- •4.6. Проблема винятків
- •4.7. Властивості знань
- •4.8. Неоднорідність знань. Області і рівні знань
- •4.9. База знань як об'єднання простіших одиниць
- •4.10. Бінарні предикати і тріада
- •4.11. Проблема неточних і неповних знань
- •5Л. Визначення та класифікація семантичних мереж
- •5.2. Семантичні мережі в пам'ті людини
- •5.3. Трирівнева архітектура семантичних мереж
- •5.4. Асиміляція нових знань на основі семантичних мереж
- •5.5. Різні способи задання семантичних мереж
- •5.6. Логічне виведення на семантичних мережах
- •5.7. Процедурні і роздалені семантичні мережі
- •Фрейми та слоти: базові поняття
- •Конкретизація, ієрархія та наслідуваніїя фреймів
- •6.3. Поповнення первинних описів на основі фреймових моделей
- •0.10 * (Кількість_уроків - 1)), (Коли, _ ), (Хто,_),
- •0.10 * (Кількість_уроків - 1)), (Коли, вчора), (Хто, Петро),
- •6.4. Мережі подібностей і відмінностей
- •6.5. Фрейми та об'єктно-орієнтоване програмування
- •6.6. Поняття про мову uml
- •7Л. Логічні побудови та логічні моделі
- •7.2. Короткий вступ до числення предикатів
- •7.3. Фразова форма запису логічних формул
- •7.4. Аналіз і доведення теорем
- •7.5. Побудова теорії певної області знань
- •7.6. Від формальної логіки до логічного програмування
- •Будь-який терм зіставляється сам з собою. Наприклад, дві фрази
- •Різні константи не зіставляються одна з одною, тому фрази
- •Змінна може бути замінена константою або іншим термом. Так, фрази
- •7.7. Мова Пролог і логічне програмування
- •7.8. Основні ідеї Прологу
- •7.9. Як працює Пролог
- •8.1. Характеристика продукіцйиих моделей
- •8.2. Продукції та мережі виведення
- •8.3. Типова схема роботи експертної системи на базі продукцій
- •8.4. Пряме та зворотне виведення
- •8.5. Типові дисципліїш виконання продукцій
- •8.6. Основні стратегії вирішешія конфліктів у продукіцйііих системах
7.8. Основні ідеї Прологу
Спочатку коротко підсумуємо викладені роздуми. Отже, програма на Пролозі може складатись з набору фактів разом з набором умов, яким має задовольняти розв'язок, і комп'ютер має сам вивести рішення з даних фактів. Такий підхід до програмування називається логічним програмуванням. Пролог опирається на формальну логіку так само, як FORTRAN,
BASIC базуються на арифметиці та простій алгебрі. Для виконання завдань Пролог використовує техніку, розроблену для доведення теорем у логіці.
Пролог є дуже різнобічною мовою. Зауважимо, що Пролог можна застосовувати для програмування всіх видів алгоритмів, не тільки для тих, для яких він був спеціально створений. Використання Прологу не пов'язане з якимось одним класом алгоритмів, логікою програми чи форматом файлів. Тому Пролог не менш потужний, ніж Pascal, С або C++, а у багатьох аспектах навіть потужніший. Доцільність його застосування, очевидно, має визначатися конкретною ситуацією.
Перші повідомлення про Пролог з'явились на початку 70-х років. Він належить до класу логічних мов програмування, основні ідеї розробки яких запропонували Р. Ковальські і П. Хейс. Перший інтерпретатор Прологу був розроблений у Марселі (Франція) під керівництвом А. Колмерое в 1973 р. Наступна версія, виконана Д. Уореном — Единбурзька реалізація Прологу на машині DEC-10 — перевела Пролог і разом з ним логічне програмування з площини теоретичних досліджень у площину практичного програмування, зробила його корисним інструментом для вирішення різних задач штучного інтелекту.
Для Прологу характерним є і той факт, що програміст повинен мислити в термінах цілей. Що під цим розуміється? На відміну від традиційних мов програмування, Пролог вимагає від програміста змінити форму мислення по написанню програм. Прологівська програма являє собою набір визначень ситуацій і формулювань задач замість того, щоб детально описувати варіанти рішень цих задач. Основою Прологу є обмежений, але на диво потужний і гнучкий набір програмних механізмів, який включає: зіставлення зразків, задання структур даних типу дерева та автоматичне повернення. Назва "Пролог" утворилась як скорочення від "програмування в термінах логіки". Отже, "Пролог" можна віднести до мов програмування, які будуються на описовому або декларативному підході до програмування.
Можна виокремити два рівні характеристики прологівської програми: декларативний і процедурний. Перший з них визначає, яким повинен бути результат роботи програми, за допомогою відношень. Другий — як цей результат був отриманий і які з відношень реально оброблялись. Пролог- системи значну частину процедурних деталей виконують самостійно, без втручання програміста. Останній, таким чином, може більше уваги приділяти декларативному аспекту програми, не відволікаючись на організацію процесу обчислень, якщо його не хвилює питання ефективності цих обчислень.
Спочатку Пролог належав до теоретичних мов програмування і в основному використовувався як інструментарій у наукових дослідженнях. На це впливало і те, що довгий час учені із США не сприймали його переваг для вирішення задач штучного інтелекту. Дж. Малпас пояснює цей факт тим, що, по-перше, серед учених США сильними залишались лісповські традиції (мова Лісп створена в Массачусетському технологічному інституті) і, по-друге, — попереднє знайомство з мовою логічного типу Мікро- пленнер було невдалим. Остання реалізовувалася дуже неефективно. Та зі створенням швидких інтерпретаторів і компіляторів Пролог посів почесне місце не тільки серед найвживаніших мов вирішення задач штучного інтелекту, а й серед мов, які використовуються спеціалістами в галузях реля- ційних баз даних, програмної інженерії, задання знань, експертних системах і багатьох інших.
Резюмуючи сказане, можна відмітити такі переваги Прологу:
Пролог має чітку математичну основу, дуже близьку до людського мислення.
Використання єдиної мови специфікацій (числення предикатів) для опису вимог до програм і опису самої програми на Пролозі дозволяє поєднувати процес написання програми з її верифікацією.
Застосування відношення як базового поняття мови дає змогу зручно працювати з реляційними базами даних.
Паралельний принцип організації обчислень дозволяє просто і природно реалізовувати Пролог-програму на паралельному комплексі.
Пролог підтримує обчислення, які базуються на пошуку через зворотний ланцюжок міркувань. Це забезпечує ефективність використання Прологу при побудові експертних систем.
Пролог може зберігати за допомогою "логічних змінних" проміжні результати обчислень для подальшого використання. Це дозволяє природно вирішувати проблему організації логічного виведення.
Поряд із зазначеними перевагами спеціалісти відзначають такі вади Прологу.
Складність розуміння процесу виконання програми на Пролозі, пов'язаної з "невидимим" порядком побудови виведення результату програмою.
Погані засоби для вияву екстралогічних властивостей (оператори динамічного приєднання і вилучення тверджень).
Відсутність досконалих засобів для розробки і відлагодження великих програм.
Недостатні засоби підтримки модульного принципу програмування.
У комерційних цілях Пролог часто використовують у створенні експертних систем, інтелектуальних баз даних і програм, з якими можна спілкуватись звичайною мовою [175].
Пролог має багато спільного з Ліспом [267]— мовою, яку традиційно застосовують у дослідженнях зі штучного інтелекту. Обидві мови роблять досить простим виконання складних обчислень над складними даними. Крім того, вони досить потужні, щоб елегантно запрограмувати складні алгоритми. І Пролог, і Лісп використовують динамічне виділення пам'яті, тому нема потреби декларувати змінні перед тим, як їх застосовувати. Ці мови також дозволяють програмам перевіряти та модифікувати самих себе, тому програма може "вчитись" на тій інформації, яку вона отримує під час своєї роботи.
Головна різниця полягає в тому, що Пролог має процедуру, яка здатна до "міркування" — машину логічного виведення, вбудовану в нього, тоді як Лісп цього не має. Тому програми, які виконують якісь логічні роздуми, легше писати на Пролозі, ніж на Ліспі. Якщо вбудована машина логічного виведення не підходить для конкретної задачі, програміст дуже часто може використовувати частину цього механізму, переписавши все інше. В Ліспі, навпаки, якщо потрібна машина логічного виведення, програміст сам має її забезпечити.
Чи Пролог об'єктно-орієнтований? Не зовсім. Пролог — інше, нове і різнопланове вирішення проблеми, яку об'єктно-орієнтовані мови повинні були розв'язати. Пролог дозволяє говорити про властивості та зв'язки прямо, замість того, щоб добиратись до них через механізм наслідування.
