Ciao prolog - PowerPoint PPT Presentation

About This Presentation
Title:

Ciao prolog

Description:

Ciao prolog Kontra Gergely kgergely_at_mcl.hu – PowerPoint PPT presentation

Number of Views:108
Avg rating:3.0/5.0
Slides: 21
Provided by: PhD52
Category:

less

Transcript and Presenter's Notes

Title: Ciao prolog


1
Ciao prolog
  • Kontra Gergely
  • kgergely_at_mcl.hu

2
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 programfejlesztoi környezet Emacs-hoz
ciaopp preprocesszor (fejlesztés alatt)
lpdoc automatikus dokumentáció
3
Ciao prolog kiterjesztések
  • Globális változók
  • Setarg és undo
  • Végrehajtás késleltetés
  • Párhuzamos programozás (-Prolog szeru)
  • Funkcionális szintaxis
  • Magasabb rendu könyvtárak
  • Aktív modulok
  • Szélességi bejárás
  • Fokozatosan mélyülo bejárás (iterative deepening)
  • CLP
  • OO

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

5
Assert deklarációk miért használjuk?
  • Futás közbeni ellenorzés
  • Orákulum (felhasználó) helyett
  • Fordítási idoben (típus)ellenorzé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

6
Assertions
  • pred deklaráció- use_package(assertions).-
    pred length(L,N) list var gt list integer
    "Computes the length of L.".- pred length(L,N)
    var integer gt list integer "Outputs L
    of length N.".- pred length(L,N) list
    integer gt list integer "Checks that L is of
    length N.".length(,0).length(_L,N) -
    length(L,N0), N is N0 1.

7
Assertions II.
  • calls elofeltétel- calls is(term,arithexpressi
    on).
  • success pred nem hiúsul meg- success
    length(L,N) list var gt list integer.
  • comp végrehajtás tulajdonságai- comp
    append(Xs,Ys,Zs) var var var not_fail.
  • prop olyan predikátum, amely biztosan lefut,
    nincs mellékhatása és nem köt le változókat, így
    használható futás ideju ellenorzésre
  • entry predikátum külso meghívásaezekben az
    állításokban a fordító megbízik!!!
  • Comment program dokumentálás-comment(Pred,Comm
    ent)

8
Assertions III.
  • modedef hívási módok- modedef A nonvar(A)
    "A is bound upon predicate entry.".- pred
    p(A,B) integer(A) gt ground(B). ???
  • decl pred deklarációkban
  • check futásideju programellenorzés
  • trust Extra információ a fordítónak? A FORDÍTÓ
    HISZ NEKÜNK ?
  • true és false analízis kimenete

9
Properties I.
  • - use_package(nativeprops).
  • program analízishez kell
  • linear(X) nincs függoség a változók között
  • mshare(X) változók függoségenem 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
    illesztheto
  • not_mut_exclusive(X) van, hogy több klózra
    illesztheto

10
Properties II.
  • 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
    szereplo változók páronként függetlenek

11
Egyéb fejlesztések I.
  • -use_module(library(librowser)).
  • ?- browse(M,findall/A).A 3,M
    conc_aggregates ? A 4, M aggregates ? A
    3, M aggregates ?
  • ?- where(findall/A).findall/3 exported at module
    conc_aggregatesfindall/4 exported at module
    aggregatesfindall/3 exported at module aggregates
  • ?- describe(librowser).Predicates at library
    librowser apropos/1system_lib/1describe/1wher
    e/1browse/2update/0
  • ?- apropos('atom_').terms atom_concat/2concurr
    ency atom_lock_state/2atomic_basic
    atom_concat/3, atom_length/2, atom_codes/2iso_byt
    e_char atom_chars/2

12
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,house,house,h
    ouse,member(housenationgtOwns_zebra,petgtze
    bra, Street),member(housenationgtDrinks_water,
    drinkgtwater, Street),member(housedrinkgtcoffe
    e,colorgtgreen, Street),

13
Egyéb fejlesztések III.
  • - use_module(library(terms_check)).
  • ask(Term1,Term2). Term1 és Term2 egyesítheto
    Term1-ben történo behelyettesítés nélkül
  • instance(Term1, Term2) Term1 Term2 egy
    példányaEz is egy befejezetlen remekmu ?
  • variant(Term1, Term2) A két term a benne
    szereplo változóktól eltekintve megegyezik.
  • - use_package(andprolog).q - a b.Csak akkor
    mukö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).

14
Korutinszeru eszközök
  • - 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 ?

15
Aktív modulok
  • Ö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, ok
    küldik a választ
  • Átlátszó a visszalépésre
  • Elore kiszámol a modul minden megoldást
    (hatékonysági okokból, bár ez késobb 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

16
Szélességi bejárás
  • - module(chain, _, bf).test(bf) -
    bfchain(a,d).test(df) - chain(a,d).
    loops!bfchain(X,X) lt- .bfchain(X,Y) lt-
    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 181040 2002?-
    use_module('d/tmp/chain.pl').?-
    test(bf).yes?- test(df). realloc Not enough
    coreERROR Memory allocation failed
    Execution aborted ?-

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

18
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(I
    tem)).pop(Item) - var(Item), retract_fact(storag
    e(Item)). top(Top) - storage(Top), !. is_empty
    - storage(_), !, fail. is_empty.

19
OO Verem használat
  • Ha a class-t module-ra cseréljük, muködoképes
    modult kapunk! (igaz, hogy akkor egy darab
    vermünk lesz)
  • ?- use_package(objects).?- use_class(library('cla
    ss/examples/stack')).?- St1 new stack,St2 new
    stack.St1 stack('9254074093385163'),St2
    stack('9254074091') ? ,?- St1push(8),St2push(9)
    .St1 stack('9254074093385163'),St2
    stack('9254074091')?- St1top(I),St2top(K).I
    8,K 9,St1 stack('9254074093385163'),St2
    stack('9254074091') ?
  • Inherit_class/1, inheritable/1, virtual/1,
    data/1, export/1

20
Köszönöm a figyelmet
!
!
?
?
?
?
!
?
!
Write a Comment
User Comments (0)
About PowerShow.com