Плэнер
Плэнер (Planner) — функционально-логический язык программирования, схожий по своему синтаксису с Лиспом. Разработан в Лаборатории искусственного интеллекта Массачусетского технологического института Карлом Хьюттом (англ. Carl Hewitt) в 1967—1971 годы, первая публикация с описанием языка появилась в 1969 году.
Planner | |
---|---|
Класс языка | Логическое программирование |
Появился в | 1969 |
Автор | Карл Хьюитт |
Диалекты | Ether |
Повлиял на | Лисп, QA-4, Popler, Conniver и QLISP |
Изначально позиционировался автором как язык для автоматического планирования и диспетчеризации в робототехнике, в дальнейшем получил признание специалистов по искусственному интеллекту как язык, обладающий наиболее адекватным набором выразительных средств для такого рода задач (считалось, что для этого требуются гибкие возможности символьной обработки). Несмотря на то, что язык так и не был реализован в полном объёме, его влияние на исследования, связанные с искусственным интеллектом 1970-х годов, оказалось, во многом, определяющим.
Функциональная часть языка содержала фактически целиком Лисп в качестве подмножества, другие части — средства сопоставления с образцом, поиск с возвратами, вызов процедур по образцу, дедуктивные механизмы в духе логического программирования.
В том виде, как был изначально описан автором, язык реализован так и не был как по причине громоздкости, так и схематичности описания. Первые реализации — Micro-planner и Pico-planner содержали достаточно ограниченное подмножество языка. Более полные варианты были реализованы в системе Popler и ряде её производных — QA-4, Conniver, QLISP, Ether. В 1970-х годах в СССР язык был реализован в системе ПЛЭНЕР-БЭСМ, разработанной для БЭСМ-6.
Элементы
Хотя язык фактически целиком содержит Лисп как свою часть, его встроенные возможности по символьной обработке значительно шире. К примеру, функции ELEM
и REST
обобщают функции CAR
и CDR
, позволяя выделять и отбрасывать из списка произвольные элементы: [ELEM 1 L] = = A, [REST 2 L] = (С (D Е F) (G Н))
. Кроме того, введение в запись нескольких типов скобок (в Лиспе допускаются только круглые скобки, что весьма затрудняет чтение программ) сделало программы гораздо понятнее.
Одна из наиболее примечательных возможностей языка — поиск и анализ данных по образцу (впервые реализованный в Сноболе и значительно развитый в Плэнере).
Специфическая часть языка посвящена возможностям строить и изменять описание среды, в которой решается задача: описание среды называется «базой данных» и содержит отдельные утверждения (факты), истинные в данной среде. Кроме фактов, содержащихся в базе данных, в программе нужно задавать логические отношения между используемыми в задаче понятиями, а также описания действий, которые разрешено производить. Такие описания называются теоремами. Каждая теорема имеет список условий (предпосылок), которые должны быть выполнены, прежде чем станет возможным её применение. В результате применения теоремы некоторые факты из базы данных перестают быть истинными и должны быть из неё удалены, а другие, напротив, становятся истинными и должны её пополнить. Списки фактов обоих видов также содержатся в описаниях теорем.
Другим важным нововведением языка стал режим возвратов, позволяющий во время работы программы отказываться от принятых ранее решений, если оказывается, что они не приведут к цели.
Литература
- Carl Hewitt. PLANNER: A Language for Proving Theorems in Robotsс (англ.) // Proceedings of the 1st International Joint Conference on Artificial Intelligence. — Washington, DC, USA, 7—9 May 1969. — P. 295—302.
- В. Н. Пильщиков. Язык плэнер. — М.: Наука, 1983. — 208 с. — (Библиотечка программиста).