Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc.

Podobné prezentace


Prezentace na téma: "JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc."— Transkript prezentace:

1 JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc. dvorak@uai.fme.vutbr.cz

2 2 Charakteristika jazyka Prolog Prolog znamená programování v logice a je vyústěním snahy o použití logiky jako programovacího jazyka. Ve srovnání s ostatními programovacími jazyky přinesl Prolog tuto změnu programovacího stylu: namísto otázky, JAK se má získat výsledek, se uživatel zajímá o to, CO platí mezi objekty, s nimiž jeho program pracuje (tím se Prolog podobá specifikačním jazykům). Prolog je tedy vhodným prostředkem pro řešení takových úloh, ve kterých zkoumáme vztahy mezi objekty. Podobně jako v Lispu můžeme za základ systému Prolog považovat jakýsi univerzální vyhodnocovací systém (interpret). Namísto definic funkcí dostává tento systém definice relací (vztahů), kterými dotváří své pracovní prostředí. Toto prostředí spolu se standardním odvozovacím mechanismem pak systém používá při zodpovídání dotazů uživatele na platnost nebo neplatnost konkrétních případů vztahů mezi objekty.

3 3 Historie jazyka Prolog A. Colmerauer a P. Roussel (universita v Marseille, 1972) Prvá verze Prologu jako prostředek pro efektivní odvozování důsledků z určité třídy formulí predikátové logiky. R. Kowalski (1974) Teoretický model Prologu na základě procedurální implementace Hornových klauzulí. D. Warren (Edinburgh, 1974) Efektivní implementace na počítači DEC-10; zahájení éry překladačů Prologu. Japonský projekt počítačů 5.generace (1981) Prolog zvolen jako základní jazyk logického procesoru centrální jednotky počítače; vyvolání vlny zájmu o Prolog a metody logického programování.

4 4 Struktura programu v Prologu Program v Prologu sestává z klauzulí. Existují tři typy klauzulí: fakta, pravidla a dotazy. Klauzule definující stejnou relaci vytvářejí tzv. proceduru. Definice vztahů vyjádřené fakty a pravidly se po zadání stávají součástí pracovního prostředí Prologu nazývaného databáze. Pravidla vyjadřují tvrzení závislá na splnění nějakých podmínek. Každé pravidlo má hlavu a (neprázdné) tělo, které je konjunkcí cílů. Fakta se používají k vyjádření bezpodmínečně pravdivých tvrzení. Fakta jsou klauzule s hlavou, ale s prázdným tělem. Dotazy vyvolávají výpočet programu; jeho smyslem je zjistit, zda nějaké tvrzení platí či nikoliv. Každý dotaz je klauzule bez hlavy.

5 5 Zodpovězení dotazu Zodpovězení dotazu probíhá postupným ověřováním splnitelnosti jednotlivých cílů. Je-li výsledek vyhodnocení cíle kladný, říkáme, že cíl byl úspěšný (uspěl) a že je splnitelný. V případě záporného výsledku říkáme, že cíl byl neúspěšný (neuspěl, selhal) a že je nesplnitelný. Během procesu vyhodnocení cíle (dotazu) dochází v případě úspěchu k nastavení proměnných na takové hodnoty, které umožní jeho splnitelnost. Je-li více možností, jak dosáhnout splnění cíle, Prolog je schopen je všechny zjistit pomocí postupu nazývaného zpětné prohledávání (backtracking). Neúspěch při vyhodnocení cíle neznamená, že Prolog dokázal jeho neplatnost, ale pouze to, že nebyl schopen ze své databáze dokázat jeho platnost.

6 6 Datové objekty v Prologu datové objekty (termy) struktury (složené termy) jednoduché objekty proměnnékonstanty číslaatomy

7 7 Atomy a čísla Atomy:  identifikátory začínající malým písmenem; součástí jména atomu může být i znak _ (podtržení), který se syntakticky zařazuje do stejné skupiny znaků jako velká písmena, takže jím jméno atomu nesmí začínat  posloupnosti speciálních znaků  řetězce znaků uzavřené mezi apostrofy; v takovém případě může jméno atomu obsahovat libovolné znaky a může i začínat velkým písmenem Čísla: Používá se notace běžná v tradičních programovacích jazycích. Všechny implementace Prologu dovolují používat celých čísel, jen některé mají zavedeny rovněž operace s čísly necelými zobrazenými v pohyblivé řádové čárce.

8 8 Proměnné Na rozdíl od Lispu, kde proměnnou můžeme vyjádřit libovolným symbolickým atomem, Prolog syntakticky rozlišuje atomy a proměnné!! Proměnné jsou reprezentovány identifikátory, které začínají velkým písmenem nebo znakem _ (podtržení). Zvláštní význam má tzv. anonymní proměnná vyjádřená pouze znakem _. Touto proměnnou označujeme takový argument relace, jehož hodnota nás nezajímá. Každý výskyt znaku _ představuje novou anonymní proměnnou, takže hodnoty na příslušných místech se nemusí shodovat. Každá proměnná má svůj rozsah platnosti lexikálně omezen klauzulí, v níž je použita. V jistém smyslu lze roli proměnných v pravidlech chápat jako obdobu formálních parametrů v procedurách; přitom způsob volání těchto „parametrů“ je specificky prologovská varianta volání jménem.

9 9 Hodnoty proměnných Každá proměnná se může nacházet v jednom z následujících dvou stavů:  nenastavená (neinstanciovaná) proměnná není vázána na žádnou konstantu nebo strukturu jako na svoji hodnotu  nastavená (instanciovaná) proměnná má již přiřazenu konkrétní hodnotu K nastavení proměnných dochází především při výběru pravidla nebo faktu z databáze, podle něhož se bude Prolog řídit při vyhodnocení určitého cíle. Jednou definovanou hodnotu proměnné nelze v rozsahu její platnosti měnit. Ke zrušení nastavení dochází jednak při úspěšném nebo neúspěšném výstupu z lexikálního rozsahu platnosti dané proměnné, ale také při zpětném návratu a požadavku na nové splnění cíle, v němž došlo k předchozímu nastavení proměnné.

10 10 Struktury Strukturované objekty neboli struktury jsou vytvořené z dílčích komponent (složek) jejich spojením do zápisu, který má syntaktickou podobu tzv. složeného termu: f(t 1, t 2, …, t n ) kde f je atom (identifikátor) vyjadřující funktor struktury a t 1, t 2, …, t n jsou libovolné datové objekty vyjadřující argumenty. Strukturu lze chápat jako linearizovaný zápis obecného stromu. Jednou z diskutabilních vlastností Prologu je možnost používat v termech stejné jméno funktoru s rozdílným počtem argumentů. Z tohoto důvodu se každý funktor vedle svého jména charakterizuje ještě svojí četností neboli aritou. Syntaxe Prologu dovoluje vžité binární operátory (např. aritmetické a relační operátory) používat také v infixovém zápisu.

11 11 Syntaxe programu Program je posloupnost klauzulí (případně doplněná komentáři): klauzule1 klauzule2... klauzuleN Každá klauzule má jeden z těchto tvarů: term0 :- terml,term2, …,termN. (pravidlo) term. (fakt) ?- terml,term2, …,termK. (dotaz) Za komentář se v Prologu považuje text začínající znakem % (procento) až do konce řádku.

12 12 Termy a klauzule Každý term použitý v klauzuli má nejčastěji tvar struktury, může to však být také atom. Symboly používané pro zápis klauzulí je třeba považovat za infixové popř. prefixové operátory, takže i klauzule jsou syntakticky vzato termy. Význam symbolů v pravidle: symbol :- znamená implikaci  a čárka znamená konjunkci (je také možno použít středník ve významu disjunkce). Termy uvedené v klauzulích se při výpočtu interpretují jako cíle. Termy lze vytvářet dynamicky i během výpočtu programu a existuje i způsob, jak takto vytvořené termy interpretovat jako cíle. Lze tedy konstatovat, že podobně jako v Lispu, také v Prologu nelze syntakticky rozlišit program od dat a záleží na kontextu použití, zda se určitý term chápe pouze jako datový objekt nebo jako cíl.

13 13 Srovnání Vyhodnocovací systém je schopen určit, zda je určité pravidlo použitelné při vyhodnocení zadaného cíle – musí tedy být schopen důkladného srovnání hlavy klauzule a cíle. Operace srovnání (matching) je jedním ze základních pilířů systému Prolog. Je to aktivní mechanismus, jehož výsledkem není jen odpověď ano/ne. Během procesu srovnání se totiž případně musí hledat vhodná substituce za proměnné, pomocí níž se podaří termy "zestejnit". Dva termy se srovnají když jsou identické, nebo když proměnné vyskytující se v těchto termech lze nastavit na takové hodnoty, že se získají identické termy. Protože český termín srovnání má obecnější význam, používá se často místo něj termín unifikace. Výsledkem unifikace je vždy buď neúspěch, nebo substituce, s jejíž pomocí se termy unifikují, t.j. stanou se identickými. Tato substituce může ovšem být i prázdná, pokud jsou unifikované termy identické.

14 14 Zásady pro unifikaci Nechť S a T jsou termy: 1. Jsou-li S a T konstanty, pak se unifikují právě tehdy, když se jedná o stejné objekty. 2. Je-li S proměnná a T jakýkoliv term, pak se unifikují a současně se S nastaví na hodnotu T. Podobně, je-li T proměnná, pak se nastaví na hodnotu S. 3. Jsou-li S a T struktury, pak se unifikují právě tehdy, když (a) S i T mají stejný hlavní funktor, (b) odpovídající si složky termů S a T se unifikují. Výsledkem úspěšné unifikace je vždy tzv. nejobecnější unifikátor, což je substituce, která váže hodnoty proměnných tím nejméně omezujícím způsobem, a tak jim dává větší volnost pro případné následující unifikace.


Stáhnout ppt "JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc."

Podobné prezentace


Reklamy Google