Prolog - Енциклопедія мов програмування

Prolog (від “PROgramming in LOGic”) – декларативна мова програмування загального призначення.

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

Стандарт мови надано в ISO/IEC 13211-1 (1995 рік).

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

Prolog був створений під впливом більш ранньої мови Planner і запозичив із неї такі ідеї:

  • зворотний логічний висновок (виклик процедур за шаблоном, виходячи з цілей);
  • побудова структура логіки, що управляє, у вигляді обчислень з відкатами;
  • принцип "заперечення як невдача";
  • використання різних імен для різних сутностей тощо.

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

Prolog використовує один тип даних, терм, який буває кількох типів:

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

Програми, написані на чистому Prolog, описують відносини між сутностями, що обробляються, за допомогою клауз Хорна. Клауза - це формула вигляду Голова: - Тіло. , яка читається як “щоб довести/вирішити Голову, слід довести/вирішити Тіло”. Тіло клаузи складається з кількох предикатів (цілей клаузи), скомбінованих за допомогою кон'юнкції та диз'юнкції. Клаузи з порожнім тілом називаються фактами та еквівалентні клаузам виду Голова :- true. (True - не атом, як в інших мовах, а вбудований предикат).

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

Предикати з кількома аргументами можуть діяти за кількома напрямами залежно від цього, які з аргументів вже пов'язані, а які — ні. Наприклад, ….

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

Метою виконання програми на Prolog є оцінювання одного цільового предикату. Маючи цей предикат і набір правил і фактів, заданих у програмі, Prolog намагається знайти прив'язки (значення) змінних, у яких цільовий предикат набуває значення істинності.

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

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

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

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

Пролог реалізований практично для всіх відомих операційних систем та платформ. До операційних систем входять OS для мейнфреймів, все сімейство Unix, Windows, OS для мобільних платформ.

Багато сучасних реалізації мови мають внутрішнє розширення за рахунок ООП-архітектури. Окрім пропрієтарних рішень, існують вільні реалізаціїПрологу.

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

Основні віхи розвитку мови Prolog

Найбільш помітні тенденції історії розвитку мови Prolog

У розвитку мови Prolog спостерігаються дуже цікаві тенденції. Ця мова швидко набула популярності в Європі як інструмент практичного програмування. У Японії навколо мови Prolog було зосереджено всі розробки комп'ютерів п'ятого покоління. З іншого боку, у США ця мова загалом була прийнята з невеликим запізненням у зв'язку з деякими історичними причинами. Одна з них полягала в тому, що Сполучені Штати спочатку познайомилися з мовою Microplanner, яка також була близька до ідеї логічного програмування, але неефективно реалізована. Певна частка низької популярності Prolog у цій країні пояснюється також реакцією на існуючу спочатку "ортодоксальну школу" логічного програмування, представники якої наполягали на використанні чистої логіки і вимагали, щоб логічний підхід не був "заплямований" практичними засобами, що не належать до логіки. У минулому це призвело до поширення невірних поглядів на мову Prolog. Наприклад, деякі вважали, що цією мовою можна програмувати лише міркування з висновком від цілей до фактів. Але істина полягає в тому, що Prolog — універсальна мова програмування і нею можебути реалізований будь-який алгоритм. Далека від реальності позиція “ортодоксальної школи” була подолана практиками мови Prolog, які прийняли прагматичніший підхід, скориставшись плідним поєднанням нового, декларативного підходу з традиційним, процедурним.