Ciao prolog - PowerPoint PPT Presentation

Loading...

PPT – Ciao prolog PowerPoint presentation | free to download - id: 736535-OWE0Z



Loading


The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
About This Presentation
Title:

Ciao prolog

Description:

Ciao prolog Kontra Gergely kgergely_at_mcl.hu – PowerPoint PPT presentation

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

less

Write a Comment
User Comments (0)
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ása ezekben 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é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
    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_aggregates findall/4 exported at module
    aggregates findall/3 exported at module aggregates
  • ?- describe(librowser). Predicates at library
    librowser apropos/1 system_lib/1 describe/1 wher
    e/1 browse/2 update/0
  • ?- apropos('atom_'). terms atom_concat/2 concurr
    ency atom_lock_state/2 atomic_basic
    atom_concat/3, atom_length/2, atom_codes/2 iso_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ánya Ez 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
    core ERROR 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
!
!
?
?
?
?
!
?
!
About PowerShow.com