Planner
Planner | |
---|---|
Парадигма | Логічне програмування |
Дата появи | 1969 |
Творці | Карл Хьюїт[en] |
Діалекти | Ether |
Вплинула на | QA-4, Popler, Conniver і QLISP |
Planner (іноді записується великими літерами як PLANNER, в радянській літературі також застосовувалося транслітероване Пле́нер) — функційно-логічна мова програмування, схожа за своїм синтаксисом з Ліспом.
Була розроблена Карлом Хьюїтом[en] в Лабораторії Штучного Інтелекту Массачусетського Технологічного Інституту. Перша публікація з описом мови з'явилася 1969 року (Hewitt, 1969).
Planner — перша мова логічного програмування, в якій було закладено можливість автоматичного виведення результату з даних і заданих правил перебору варіантів (сукупність яких називалася планом). Planner застосовувалася для того, щоби знизити вимоги до обчислювальних ресурсів (за допомогою методу пошуку з вертанням) і забезпечити можливість виведення фактів, без активного застосування стека. Потім було розроблено мову Prolog, яка не вимагала плану перебору варіантів, і була в цьому сенсі спрощенням мови Planner. Зараз Planner дуже нагадує єдинорога: ми багато про неї знаємо, але вона ніколи не існувала. Інакше кажучи, мова програмування Planner ще ніде ніколи не використовувалася. Тим не менше, ідеї, покладені в основу мови Planner, виявились дуже продуктивними, і було створено й випробувано декілька варіантів і фрагментів цієї мови. Одним з найвідоміших виявився MICRO-PLANNER.
Незважаючи на те, що мову так і не було, судячи з усього, реалізовано в повному обсязі, її вплив на дослідження, пов'язані зі штучним інтелектом, виявився багато в чому визначним.
Реалізації і похідні системи
Перші реалізації, Micro-planner та Pico-planner, містили досить обмежені підмножини мови. Практично повні варіанти Planner було реалізовано в системі Popler і ряді похідних — QA-4, Conniver, QLISP, Ether.
В СРСР цю мову було реалізовано в системі пленер-БЕСМ, розробленій для БЕСМ-6 в кінці 1970-х років.
LISP та Prolog — дві найпопулярніші мови символьної обробки. Однак цікаві ідеї пропонувалися і творцями інших мов, які не отримали широкої популярності. Одна з таких мов — Planner. Свою назву (що перекладається як «планувальник») вона отримала завдяки тому, що була здебільшого призначена для створення систем планування дій роботів. Planner була розроблена Карлом Х'юїттом з Массачусетського технологічного інституту 1971 року, і стала серйозним етапом у розвитку ідей обробки символьної інформації.
Planner має всі можливості мови LISP, тобто, фактично, LISP є її підмножиною. Але набір вбудованих функцій в мові Planner набагато ширший, а самі вони зазвичай набагато могутніші відповідних функцій мови LISP. Наприклад, функції ELEM і REST узагальнюють функції CAR і CDR, дозволяючи виділяти й відкидати зі списку довільні елементи: [ELEM 1 L] = = A, [REST 2 L] = (С (D Е F) (G Н))
. Крім того, введення в запис декількох типів дужок (в мові LISP допускаються лише круглі дужки, що дуже ускладнює читання програм) зробило програми набагато зрозумілішими. Але найголовніше, мову було збагачено додатковими можливостями.
Перша з них — пошук і аналіз даних за зразком. Подібний механізм був успішно випробуваний в мові Snobol і широко застосовується зараз, наприклад, коли в Norton Commander задається пошук всіх файлів виду *.doc
, то виконується саме ця дія.
Друга додаткова можливість дозволяє досить ефективно застосовувати Planner при створенні систем штучного інтелекту: можна будувати і змінювати опис середовища, в якому розв'язується завдання. Опис середовища називається базою даних, і містить окремі твердження (факти), істинні в даному середовищі. Крім фактів, що містяться в базі даних, в програмі потрібно задавати логічні відносини між використовуваними в завдані поняттями, а також опису дій, які дозволено проводити. Такі описи називаються теоремами. Кожна теорема має список умов (передумов), які повинно бути виконано, перш ніж стане можливим її застосування. В результаті застосування теореми деякі факти з бази даних перестають бути істинними і повинні бути з неї вилучені, а інші, навпаки, стають істинними, і повинні її поповнити. Списки фактів обох видів також містяться в описах теорем.
Найважливішим нововведенням мови Planner став режим повернень. Він дозволяє під час роботи програми відмовлятися від ухвалених раніше рішень, якщо виявляється, що вони не призведуть до мети. Для штучного інтелекту взагалі характерне застосування перебору варіантів під час розв'язання завдань, вбудований в мову Planner режим повернень (його ще називають механізмом пошуку з поверненням, англ. backtracking) звільняє програміста від необхідності самому реалізовувати такий перебір.
Функційний підхід проти логічного підходу
Двома основними парадигмами для побудови семантичних систем програмного забезпечення були функційна і логічна. Функційну парадигму було втілено Ліспом (McCarthy та ін., 1962), яка характеризується рекурсивними процедурами, які оперують списками структур.
Логічну парадигму було втілено в процедури за допомогою правила резолюцій (Robinson, 1965). Згідно з логічною парадигмою це був «обман», щоби включити функційні знання (Green, 1969).
Одначе, Planner змогла умістити в собі такі переваги логічного і функційного програмування, як:
- зручність опису відносин між об'єктами (реляційна модель);
- можливість перебору і пошуку різних рішень;
- легкість розуміння налагодження програм;
- компактність коду;
- легкість опису складних структур даних;
- підвищення надійності коду;
- зручність організації модульного тестування;
- можливості оптимізації при компіляції;
- можливості паралелізму.
Джерела
- Алгоритмізація та програмування — StudFiles
- Ю. Чарняк, Умозаключения и знания, Часть 1, Язык программирования Planner (рос.)
- Логічне програмування — glossary.starbasic.net
- McCarthy, John; Abrahams, Paul; Edwards, Daniel; Hart, Timothy; Levin, Michael (1962). Lisp 1.5 Programmer’s Manual. MIT Computation Center and Research Laboratory of Electronics. (англ.)
- Robinson, John Alan (1965). A Machine-Oriented Logic Based on the Resolution Principle. CACM. (англ.)
- Green, Cordell (1969). Application of Theorem Proving to Problem Solving. IJCAI. (англ.)
- Hewitt, Carl (1969). PLANNER: A Language for Proving Theorems in Robots. IJCAI. CiteSeerX: 10.1.1.80.756. (англ.)