přejít na obsah přejít na navigaci

Linux E X P R E S, Prolog

Prolog

O Prologu bez prologu? Ano, jde to, a tak se na Prolog hned podíváme - s Lukášem Faltýnkem .


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.

Nahoru

Odkazy

Příspěvky

Prolog je mocný
25. 02. 2006, 23:09:03
Odpovědět  Odkaz 
Prolog je velmi mocný na prohledávání ve stavovém prostoru. Velmi elegantně se v něm řeší pak problémy.
Ericsson
2. 03. 2006, 12:19:56
Odpovědět  Odkaz 
Dovolil bych si poznamku k Prologu ve firme Ericsson. Nevyuzivaji jazyk Prolog, nybrz jazyk Erlang, ktery ze syntaxe Prologu vychazi. Viz www.erlang.se
Lukáš Faltýnek Re: Ericsson
LuFa 2. 03. 2006, 14:05:44
Odpovědět  Odkaz 
Dekuji za poznamku. S vyuzivanim jazyka Erlang ve firme Ericsson souhlasim. Nicmene v aplikaci pro správu zdrojů (NRM), o ktere se ve clanku zminuji je pouzit skutecne Prolog (SICStus Prolog). Viz. napr. http://www.sics.se/isl/sicstuswww/site/ericsson_nrm.html

Odpovědět

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Lukáš Faltýnek

Lukáš Faltýnek

Vystudoval informační management na Univerzitě Hradec Králové. Pracuje jako analytik/programátor. Láskou k počítačům vzplanul v roce 1986, kdy dostal svůj první počítač Atari 800 XL. S Unixem se poprvé setkal před dvanácti lety. Chvíli nato pak s Linuxem, který si pro jeho svobodu zamiloval. Je ženatý a má dvě děti. Mezi jeho koníčky patří literatura, kinematografie a cestování.


  • Distribuce: Ubuntu

| blog