Скачать презентацию Ciao prolog Kontra Gergely kgergely mcl hu Ciao Скачать презентацию Ciao prolog Kontra Gergely kgergely mcl hu Ciao

a00a37b504762a7f4985e1f745c5793d.ppt

  • Количество слайдов: 20

Ciao prolog Kontra Gergely kgergely@mcl. hu Ciao prolog Kontra Gergely kgergely@mcl. hu

Ciao prolog komponensek ciaoc prolog fordító ciaosh interaktív prolog debugger 4 -kapus nyomkövetés, beágyazható Ciao prolog komponensek ciaoc prolog fordító ciaosh interaktív prolog debugger 4 -kapus nyomkövetés, beágyazható ciao-shell interpreter/fordító prolog szkriptekhez ciao. el programfejlesztői környezet Emacs-hoz ciaopp preprocesszor (fejlesztés alatt) lpdoc automatikus dokumentáció 2

Ciao prolog kiterjesztések l l l Globális változók Setarg és undo Végrehajtás késleltetés Párhuzamos Ciao prolog kiterjesztések l l l Globális változók Setarg és undo Végrehajtás késleltetés Párhuzamos programozás (&-Prolog szerű) Funkcionális szintaxis Magasabb rendű könyvtárak Aktív modulok Szélességi bejárás Fokozatosan mélyülő bejárás (iterative deepening) CLP OO 3

Ciao prolog és a külvilág l l l l Külső interfészek (pl. C-hez) Socket Ciao prolog és a külvilág l l l l Külső interfészek (pl. C-hez) Socket Tcl/tk Web Perzisztencia (prolog adatbázis fájlban) SQL-szerű adatbázis interfész (SQL/ODBC) Java interfész Emacs interfész 4

Assert deklarációk – miért használjuk? l l l Futás közbeni ellenőrzés Orákulum (felhasználó) helyett Assert deklarációk – miért használjuk? l l l Futás közbeni ellenőrzés Orákulum (felhasználó) helyett Fordítási időben (típus)ellenőrzés Jobb fordítást eredményez (ezeket nem mi írjuk, hanem a fordító) „Párbeszéd” a fordítóval (feltételek, melyeknek teljesülniük kéne, és amelyek valóban teljesülnek) Program dokumentálása 5

Assertions l pred deklaráció : - use_package([assertions]). : - pred length(L, N) : list Assertions l pred deklaráció : - use_package([assertions]). : - pred length(L, N) : list * var => list * integer # "Computes the length of L. ". : - pred length(L, N) : var * integer => list * integer # "Outputs L of length N. ". : - pred length(L, N) : list * integer => list * integer # "Checks that L is of length N. ". length([], 0). length([_|L], N) : length(L, N 0), N is N 0 + 1. 6

Assertions II. l l calls – előfeltétel : - calls is(term, arithexpression). success – Assertions II. l l calls – előfeltétel : - calls is(term, arithexpression). success – pred + nem hiúsul meg : - success length(L, N) : list * var => list * integer. l comp – végrehajtás tulajdonságai : - comp append(Xs, Ys, Zs) : var * var + not_fail. l l l prop – olyan predikátum, amely biztosan lefut, nincs mellékhatása és nem köt le változókat, így használható futás idejű ellenőrzésre entry – predikátum külső meghívása ezekben az állításokban a fordító megbízik!!! Comment – program dokumentálás : -comment(Pred, Comment) 7

Assertions III. l modedef – hívási módok : - modedef +A : nonvar(A) # Assertions III. l modedef – hívási módok : - modedef +A : nonvar(A) # "A is bound upon predicate entry. ". : - pred p(+A, B) : integer(A) => ground(B). l l ? ? ? decl – pred deklarációkban check – futásidejű programellenőrzés trust – Extra információ a fordítónak A FORDÍTÓ HISZ NEKÜNK true és false – analízis kimenete 8

Properties I. l l l : - use_package(nativeprops). program analízishez kell linear(X) – nincs Properties I. l l l : - use_package(nativeprops). program analízishez kell linear(X) – nincs függőség a változók között mshare(X) – változók függősége nem jól olvasható, ezért nem használják fails(X) – az X alakú hívások meghiúsulnak not_fails(X) – az X alakú hívások sikerülnek, vagy végtelen ciklus covered(X) – van legalább egy megoldás not_covered(X) – van egy olyan X alakú hívás, ami meghiúsul is_det(X) – minden X hívás max. egy megoldást ad possibly_nondet(X) mut_exclusive(X) – csak az egyik klózra illeszthető not_mut_exclusive(X) – van, hogy több klózra illeszthető 9

Properties II. l l l steps_lb(X, Y) – X kiszámításához legalább Y rezolúciós lépés Properties II. l l l steps_lb(X, Y) – X kiszámításához legalább Y rezolúciós lépés kell steps_ub(X, Y) sideff_pure(X) – X hívása nem jár mellékhatással sideff_soft(X) – X hívása csak mérsékelt mellékhatást vált ki, mely a programfutásra nincs komoly kihatással (pl. IO) sideoff_hard(X) –X hívása mellékhatásos (pl. assert vagy retract) indep(X) – X változópár-lista, a párokban szereplő változók páronként függetlenek 10

Egyéb fejlesztések I. l : -use_module(library(librowser)). l ? - browse(M, findall/A). A = 3, Egyéb fejlesztések I. l : -use_module(library(librowser)). l ? - browse(M, findall/A). A = 3, M = conc_aggregates ? ; A = 4, M = aggregates ? ; A = 3, M = aggregates ? ; l ? - where(findall/A). findall/3 exported at module conc_aggregates findall/4 exported at module aggregates findall/3 exported at module aggregates l ? - describe(librowser). Predicates at library librowser : apropos/1 system_lib/1 describe/1 where/1 browse/2 update/0 l ? - apropos('atom_*'). terms: atom_concat/2 concurrency: atom_lock_state/2 atomic_basic: atom_concat/3, atom_length/2, atom_codes/2 iso_byte_char: atom_chars/2 11

Egyéb fejlesztések II. A zebra probléma : - use_package([argnames]). : - argnames house(color, nation, Egyéb fejlesztések II. A zebra probléma : - use_package([argnames]). : - argnames house(color, nation, pet, drink, car). zebra(Owns_zebra, Drinks_water, Street) : Street = [house${}, house${}], member(house${nation=>Owns_zebra, pet=>zebra}, Street), member(house${nation=>Drinks_water, drink=>water}, Street), member(house${drink=>coffee, color=>green}, Street), … 12

Egyéb fejlesztések III. l l : - use_module(library(terms_check)). l ask(Term 1, Term 2). – Egyéb fejlesztések III. l l : - use_module(library(terms_check)). l ask(Term 1, Term 2). – Term 1 és Term 2 egyesíthető Term 1 -ben történő behelyettesítés nélkül l instance(Term 1, Term 2) – Term 1 Term 2 egy példánya Ez is egy befejezetlen remekmű l variant(Term 1, Term 2) – A két term a benne szereplő változóktól eltekintve megegyezik. : - use_package(andprolog). q : - a & b. Csak akkor működik, ha a és b determinisztikus hívások és a hívások függetlenek. : - use_module(library(file_locks)). Dokumentáltan nem csinál semmit : - use_package(andorra). 13

Korutinszerű eszközök l l : - use_module(library(freeze)). freeze(X, Goal), frozen(X, Goal) ? ? ? Korutinszerű eszközök l l : - use_module(library(freeze)). freeze(X, Goal), frozen(X, Goal) ? ? ? : - use_module(library(when)). max(X, Y, Z) : - when(ground((X, Y)), gmax(X, Y, Z)). – Max, amely „kivárja a sorát” ? - max(X, Y, Z), Z = 5, Y = 4. X = 5, Y = 4, Z = 5 ? 14

Aktív modulok l l l Önálló modulok, melyek a speciális fordítástól eltekintve normál modulok Aktív modulok l l l Önálló modulok, melyek a speciális fordítástól eltekintve normál modulok Minden aktív modul egy önálló folyamat (egy kiszolgáló), mely a külvilággal socketen keresztül kommunikál A távoli folyamatok kérést intéznek hozzájuk, ők küldik a választ Átlátszó a visszalépésre Előre kiszámol a modul minden megoldást (hatékonysági okokból, bár ez később még változhat), így nem szabad olyan kérést küldeni, amely végtelen választ eredményez Biztonsági problémák 15

Szélességi bejárás l l : - module(chain, _, [bf]). test(bf) : - bfchain(a, d). Szélességi bejárás l l : - module(chain, _, [bf]). test(bf) : - bfchain(a, d). test(df) : - chain(a, d). % loops! bfchain(X, X) <-. bfchain(X, Y) <- arc(X, Z), bfchain(Z, Y). chain(X, X). chain(X, Y) : - arc(X, Z), chain(Z, Y). arc(a, b). arc(a, d). arc(b, c). arc(c, a). Ciao-Prolog 1. 8 #1: Mon May 27 18: 10: 40 2002 ? - use_module('d: /tmp/chain. pl'). ? - test(bf). yes ? - test(df). % realloc: Not enough core {ERROR: Memory allocation failed} { Execution aborted } ? 16

Fokozatosan mélyülő bejárás l : - use_package(id). l : - iterative(Name, St, Form, [End]). Fokozatosan mélyülő bejárás l : - use_package(id). l : - iterative(Name, St, Form, [End]). Először csak St mélységig keres megoldást, majd növeli Form kifejezésnek megfelelően, míg el nem éri -et. Például: : - iterative(p/1, 5, f). f(X, Y) : - Y is X + 10. Először 5 mélységig vizsgálja, majd 10 -esével növeli a keresési tér mélységét. 17

OO – Verem : - class(stack, []). % State declaration: storage/1 is an attribute. OO – Verem : - class(stack, []). % State declaration: storage/1 is an attribute. : - dynamic storage/1. % Interface declaration: the following predicates will % be available at run-time. : - export(push/1). : - export(pop/1). : - export(top/1). : - export(is_empty/0). % Methods push(Item) : - nonvar(Item), asserta_fact(storage(Item)). pop(Item) : - var(Item), retract_fact(storage(Item)). top(Top) : - storage(Top), !. is_empty : - storage(_), !, fail. is_empty. 18

OO – Verem használat l l l Ha a class-t module-ra cseréljük, működőképes modult OO – Verem használat l l l Ha a class-t module-ra cseréljük, működőképes modult kapunk! (igaz, hogy akkor egy darab vermünk lesz…) ? - use_package(objects). ? - use_class(library('class/examples/stack')). ? - St 1 new stack, St 2 new stack. St 1 = stack('9254074093385163'), St 2 = stack('9254074091') ? , ? - St 1: push(8), St 2: push(9). St 1 = stack('9254074093385163'), St 2 = stack('9254074091') ? - St 1: top(I), St 2: top(K). I = 8, K = 9, St 1 = stack('9254074093385163'), St 2 = stack('9254074091') ? Inherit_class/1, inheritable/1, virtual/1, data/1, export/1 19

Köszönöm a figyelmet ! ! ? ? ? ! ? Köszönöm a figyelmet ! ! ? ? ? ! ?