Prolog – jazyk pro tvorbu inteligentních aplikací

Programovací jazyk Prolog vytvořil Alain Colmerauer a Robert Kowalski v roce 1972. Šlo o úspěšný pokus, jehož předmětem bylo vytvořit jazyk, který dnes uživatelům umožní vyjadřovat se logickým popisem úlohy, namísto aby se zabývali psaním strohých počítačových instrukcí a v programu určovali, co vše a jak se má dělat.

Popularita Prologu z počátku rostla především v komunitě vědců zabývajících se umělou inteligencí. Prolog se využíval a využívá zejména pro tvorbu aplikací typu expertní systémy, inteligentní databáze a přirozený jazyk. Při zvládnutí a pochopení jazyka je vývoj aplikací a prototypů velmi rychlý, protože sémantika jazyka je blízká logické specifikaci programu. Původně byl Prolog navržen pro oblast nečíselného zpracování informací. V současných verzích jsou však již dostupná rozšíření, která číselné zpracování umožňují.

Prolog patří mezi tzv. deklarativní programovací jazyky, ve kterých uživatel popisuje pouze cíl výpočtu. Přesný postup, jakým se k výsledku program dostane, je pak ponechán na systému samotném. Děje se tak odvozením z faktů a pravidel uložených v databázi.

Syntaxe jazyka je velice jednoduchá a snadno použitelná. Prolog je založen na predikátové logice prvního řádu. Omezuje se však pouze na Hornovy klauzule. Základními přístupy, které se při tomto využívají, jsou unifikace, rekurze a backtracking.

Programování v Prologu se v mnohém liší od klasického procedurálního programování a od uživatele požaduje přizpůsobit se novému způsobu myšlení. Základem Prologu je databáze faktů a pravidel, nad kterými je možno klást dotazy formou tvrzení, u kterých Prolog zhodnocuje jejich pravdivost.

Prolog nepracuje s datovými typy, jak jsme zvyklí u klasických programovacích jazyků. U Prologu raději mluvíme o lexikálních elementech než datových typech. Lexikálními elementy jsou Atomy (konstanty), čísla, proměnné, termy, seznamy a řetězce.

Atomy nazýváme konstanty, které jsou reprezentovány posloupností písmen, čísel a dalších znaků, které začínají malým písmenem. Dále pak posloupnosti libovolných znaků, které jsou uzavřeny v apostrofech. U čísel mnoho implementací Prologu nerozlišuje mezi celými a reálnými čísly. Proměnné jsou tvořeny posloupností znaků a čísel, která začíná velkým písmenem, nebo podtržítkem. Proměnná, která je tvořena samotným podtržítkem, reprezentuje anonymní proměnnou. Tato proměnná se používá tehdy, kdy nepotřebujeme znát konkrétní hodnotu proměnné, ale musíme ji použít. Význam proměnných chápeme jinak než v procedurálních jazycích. Proměnná je lokální, což znamená, že se vztahuje pouze ke konkrétnímu vztahu v daném programu a nehovoříme o hodnotě proměnné, ale vazbě proměnné na hodnotu. Proměnná, která není vázána na hodnotu, se nazývá volná proměnná.

Termy jsou jediným způsobem, kterým Prolog může reprezentovat komplexní data. Term se skládá z hlavičky, která se nazývá funktor a parametru. Počet parametrů se nazývá aritou termu. Term je identifikován hlavičkou a aritou.

Logické vazby jsou (asserted) tvrzení a Prolog je užívá k rozhodování, zda-li je tvrzení pravdivé, nebo není. Jestliže tvrzeni pravdivé je, tak se dále určuje, která proměnná vazba toto tvrzení pravdivým udělala. Toto vede k deklarativnímu stylu programování.

K názornému dokreslení předchozích řádků uvedu dva příklady programu zapsaného v Prologu. Prvním je již známé „Hello World“. Druhým pak klasický hlavolam Hanojské věže.


Ukázka programu Hello, World!:
write('Hello').

Ukázka programu Hanojské věže
hanoi(N) :- move(N, left, centre, right).
move(0, _, _, _) :- !.
move(N, A, B, C) :-
M is N-1,
move(M, A, C, B), inform(A, B), move(M, C, B, A).
inform(X, Y) :-
write([move, a, disc, from, the, X, pole, to, the, Y, pole]),
nl.

Implementací Prologu existuje celá řada. Mezi nekomerčními, které jsou k dispozici zdarma, nalezneme výborný SWI Prolog, který je dostupný pro Linux, MS-Windows a MacOS X. Dále pak je možno použít DGKS Prolog, který je implementován v Javě. Mezi komerčními Prology vyniká SICStus Prolog a Quintus Prolog, o němž se mluví jako o „mercedesu“ mezi Prology.

Praktické uplatnění nachází Prolog v mnoha velkých firmách a organizacích. Mezi nejznámější patří NASA, která Prolog využila například pro implementaci hlasového systému, kdy je kosmonautům mezinárodní kosmické stanici (IIS) umožněno ovládat počítače hlasem. Ericsson pak Prolog využívá v aplikaci pro správu zdrojů (NRM). V biotechnologii najdeme Prolog u například u firmy Pyrosequencing. Praktické uplatnění Prologu pak dále nalezneme v logistice či dataminingu.

Z uvedených odkazů mě nejvíce nadchla kniha Dobrodružství v Prologu od Dennise Merritta. Na příkladu dobrodružné textové hry typu „adventure“ v ní autor poutavě a srozumitelně čtenáře seznamuje s jazykem Prolog. Bohužel kniha je dostupná pouze v anglickém jazyce. Pro pouze česky mluvící zájemce o Prolog mohu doporučit stránku „Programování v Prologu“, kde jsou ve stručnosti vysvětleny jeho základy. Či pak některou z vysokoškolských učebnic.

Odkazy:

Programování v Prologu (jedna z mála stránek v češtině)

Úvod do Prologu

Tvorba expertního systému v Prologu

Dobrodružství v Prologu



Článek vyšel původně v časopisu LinuxEXPRES. Autor článku Lukáš Faltýnek.

Článek je uveřejněn s GNU FDL licencí (anglicky).

You can skip to the end and leave a response. Pinging is currently not allowed.

Napište prosím komentář

You must be logged in to post a comment.