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

Slides:



Advertisements
Podobné prezentace
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
Advertisements

Přednáška 10 Určitý integrál
Deduktivní soustava výrokové logiky
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK Odpřednášeno
Dualita úloh lineárního programování a analýza citlivosti
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Tabulky v MS ACCESS Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jiří Novák.
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
JUI přednáška Příklad využití Prologu pro tvorbu expertních systémů RNDr. Jiří Dvořák, CSc.
Programovací jazyk Prolog
Algoritmizace a programování Podprogramy v Delphi - 10
Algebra.
JUI - 1. přednáška Funkcionální programování Úvod do jazyka Lisp RNDr. Jiří Dvořák, CSc.
Principy překladačů Mezikód Jakub Yaghob.
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
Základní číselné množiny
Algoritmizace a programování
Informatika I 3. přednáška
Seminář – Základy programování
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Formální jazyky a gramatiky
JUI - 9. přednáška Ř ez, negace, práce s databází RNDr. Jiří Dvořák, CSc.
Abeceda a formální jazyk
Formulace a vlastnosti úloh lineárního programování
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Sémantická analýza Jakub Yaghob
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Relační databáze.
1IT D OTAZOVACÍ JAZYKY V RELAČNÍCH DATABÁZÍCH Ing. Jiří Šilhán.
KOMBINAČNÍ LOGICKÉ FUNKCE
Informatika pro ekonomy II přednáška 10
JUI - 2. přednáška Základní funkce, definice funkcí RNDr. Jiří Dvořák, CSc.
Predikátová logika.
Predikátová logika.
Počítače a programování 1
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Algoritmizace a programování Binární soubory - 14 Mgr. Josef Nožička IKT Algoritmizace a programování
Databáze Dotazy VY_32_INOVACE_7B16. Dotazy umožňuje vybrat určité záznamy z tabulky na rozdíl od filtru vybrané záznamy umístí do samostatné dočasné nebo.
Výroková logika.
Informatika I 1. přednáška
Vztah bezkontextových jazyků a ZA
Databázové modelování
Zpracování neurčitosti Fuzzy přístupy RNDr. Jiří Dvořák, CSc.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Gymnázium, Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Hodonín Úvod do programování.
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Jazyky pro umělou inteligenci RNDr. Jiří Dvořák, CSc.
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Reprezentace znalostí
Řetězce String. Co je to řetězec Jako řetězec označujeme pojmenovanou skupinu libovolných znaků Deklarujeme jej pomocí příkazu Délka řetězce není v tomto.
Programovací jazyk C# 2. část. Datové typy C# rozeznává dva druhy datových typů, hodnotové a referenční. Hodnotové datové typy Proměnné hodnotového datového.
Ukládání dat biodiverzity a jejich vizualizace
Definiční obor a obor hodnot
PROLOG strategie vyhodnocení dotazu
Informatika pro ekonomy přednáška 8
Predikátová logika (1. řádu).
PROLOG PROgramování v LOGice
Sémantika PL1 Interpretace, modely
Predikátová logika.
Transkript prezentace:

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

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 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 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 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 Datové objekty v Prologu datové objekty (termy) struktury (složené termy) jednoduché objekty proměnnékonstanty číslaatomy

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 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 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 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 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 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 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 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.