Prolog - Енциклопедия на езиците за програмиране
Prolog (от „PROgramming in LOGic“) е декларативен език за програмиране с общо предназначение.
Prolog е създаден през 1972 г. с цел да комбинира използването на логика с представяне на знания. Оттогава той е разработил редица диалекти, които разширяват ядрото на езика с различни възможности.
Езиковият стандарт е даден в ISO/IEC 13211-1 (1995).
Prolog е един от най-старите и все още един от най-популярните езици за логическо програмиране, въпреки че е значително по-малко популярен от основните императивни езици. Използва се в системи за обработка на естествен език, изследвания на изкуствен интелект, експертни системи, онтологии и други предметни области, за които е естествено да се използва логическата парадигма.
Prolog е повлиян от по-ранния език на Planner и е заимствал следните идеи от него:
- обратен логически извод (извикване на процедури по шаблон, базирани на цели);
- изграждане на структурата на управляващата логика под формата на изчисления с връщане назад;
- принципът на „отричането като провал“;
- използване на различни имена за различни обекти и т.н.
Основната парадигма, реализирана в езика Prolog, е логическото програмиране. Както при повечето по-стари езици, по-късните реализации, като Visual Prolog, добавят по-късни парадигми към езика, като обектно-ориентирано или управлявано от събития програмиране, понякога дори с елементи на императивен стил.
Prolog използва един тип данни, термин, който се предлага в няколко типа:
- атом - наименование без специално значение, използвано за изграждане на съставни термини;
- числата и низовете са същите като на другите езици;
- променливата се обозначава с име, започващо с главна буква и се използва катозаместващ знак за всеки друг термин;
- съставен термин се състои от функтор атом, последван от няколко аргумента, всеки от които на свой ред е атом.
Програми, написани на чист Prolog, описват връзки между обработени обекти, използвайки клаузи на Horn. Клаузата е формула от формата Head :- Body. , което се чете като „за да се докаже/реши Главата, трябва да се докаже/реши Тялото”. Тялото на клаузата се състои от няколко предиката (цели на клаузата), комбинирани чрез връзка и дизюнкция. Изречения с празно тяло се наричат факти и са еквивалентни на изречения от формата Глава :- вярно. (true не е атом, както в други езици, а вграден предикат).
Предикатите са друга важна част от Prolog. Унарните предикати изразяват свойства на техните аргументи, докато предикатите с много аргументи изразяват връзки между тях. Редица вградени предикати на езика изпълняват същата роля като функции в други езици, например, ....
Предикатите с множество аргументи могат да работят в множество посоки, в зависимост от това кои от аргументите вече са обвързани и кои не. Например, ….
И накрая, за да бъде език с общо предназначение, Prolog трябва да предоставя редица помощни функции, като I/O рутинни процедури. Те се реализират като предикати без специално логическо значение, които винаги се оценяват като истина и изпълняват обслужващите си функции като страничен ефект от оценката.
Целта на изпълнението на програма Prolog е да се оцени един целеви предикат. Предвид този предикат и набор от правила и факти, дадени в програмата, Prolog се опитва да намери обвързвания (стойности) на променливи, които карат целевия предикат да се оценява като true.
Структура на Пролог програмаразлична от структурата на програма, написана на процедурен език. Пролог програма е сбор от правила и факти. Решението на проблема се постига чрез тълкуване на тези правила и факти. В този случай от потребителя не се изисква да предостави подробна последователност от инструкции, за да посочи как потокът от изчисления се контролира по пътя към резултата. Вместо това, той само дефинира възможните решения на проблема и предоставя на програмата фактите и правилата, които й позволяват да намери необходимото решение.
Във всички други отношения Prolog не се различава от традиционните езици за програмиране. Както при програма, написана на всеки друг език, програмата Prolog е проектирана да решава един проблем.
Prolog е език за логическо програмиране, базиран на логиката на клаузата на Horn, която е подмножество на предикатната логика от първи ред. Началото на историята на езика датира от 70-те години на ХХ век. Тъй като е декларативен език за програмиране, Prolog възприема някакво описание на проблема като програма и сам търси решение, използвайки механизма за обратно проследяване и унификация.
Списъкът с възможни синтактични конструкции в Prolog е малък и в този смисъл езикът е лесен за научаване. От друга страна, декларативният стил на програмиране се оказва толкова необичаен и нов за опитни програмисти, че предизвиква шок и в някои случаи се оказва спирачка.
Prolog е внедрен за почти всички известни операционни системи и платформи. Операционните системи включват OS за мейнфрейми, цялото семейство Unix, Windows, OS за мобилни платформи.
Много съвременни реализации на езика имат вътрешно разширение чрез OOP архитектурата. В допълнение към собствените решения има безплатни реализацииПролог.
Prolog е критикуван предимно за липсата на гъвкавост, поради което решенията в конвенционалните езици за програмиране (като C ++, Java) в комбинация с бази данни се оказват по-технологично напреднали от подобни решения в Prolog. Негъвкавостта се крие в трудността при изучаване на езика, по-високите изисквания за квалификация на програмист на Prolog, трудността при отстраняване на грешки в програма, недостатъчното развитие на технологията за програмиране и лошата контролируемост на междинните резултати.
Основни моменти в развитието на езика Prolog
Най-забележителните тенденции в историята на развитието на езика Prolog
Има много интересни тенденции в развитието на езика Prolog. Този език бързо набира популярност в Европа като инструмент за практическо програмиране. В Япония цялото развитие на компютрите от пето поколение беше концентрирано около езика Prolog. От друга страна, в Съединените щати този език като цяло беше възприет с малко закъснение поради някои исторически причини. Една от тях беше, че САЩ за първи път се запознаха с езика Microplanner, който също беше близо до идеята за логическо програмиране, но беше приложен неефективно. Част от ниската популярност на Prolog в тази страна също е реакция на ранната „ортодоксална школа“ на логическото програмиране, която настояваше за използване на чиста логика и изискваше логическият подход да не бъде „опетнен“ от нелогически практически средства. Това доведе до широко разпространени погрешни схващания за езика Prolog в миналото. Например, някои смятаха, че на този език може да се програмира само разсъждение с извод от цели към факти. Но истината е, че Prolog е универсален език за програмиране и можевсеки алгоритъм може да бъде приложен. Отдалечената от реалността позиция на „ортодоксалната школа” беше преодоляна от практикуващите езика Пролог, които възприеха по-прагматичен подход, възползвайки се от плодотворното съчетание на нов, декларативен подход с традиционен, процедурен.