Пролог (мова програмування)

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

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

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

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

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

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

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

Пролог реалізований практично для всіх відомих операційних систем (ОС) і платформ (в тому числі для Java і .NET). У число операційних систем входять: ОС для мейнфреймів. все сімейство Unix. Windows. ОС для мобільних платформ.

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

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

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

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

Структури є сукупності термів, укладені в круглі дужки, в тому числі і інші структури. Структура позначається ім'ям (функтором), яке розташовується перед круглими дужками.

Ще однією конструкцією є списки, елементи яких складається з т.з. тегів. В основі списків в Пролог лежать зв'язкові списки.

Правила в Пролозі записуються в формі правил логічного висновку з логічними висновками і списком логічних умов. У чистому Пролозі пропозиції обмежуються диз'юнкт Хорна:

і читаються так: «Тема ІСТИНА, якщо тіло ІСТИНА». Тіло правила містить посилання на предикати, які називаються цілями правила.

Вбудовані предикати, / 2 Значення: оператор з двома аргументами. Визначає кон'юнкцію цілей. ; / 2 Оператор визначає диз'юнкцію.

Факти в мові Пролог описуються логічними предикатами з конкретними значеннями. Факти в базах знань на мові Пролог представляють конкретні відомості (знання). Узагальнені відомості і знання в мові Пролог задаються правилами логічного висновку (визначеннями) і наборами таких правил виведення (визначень) над конкретними фактами і узагальненими відомостями. Пропозиції з порожнім тілом називаються фактами. Приклад факту:

Цей факт еквівалентний правилом:

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

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

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

Hello World

Схожі статті