Ciao prolog Kontra Gergely 2 Ciao prolog komponensek ciaoc prolog fordító ciaosh interaktív prolog debugger 4-kapus nyomkövetés, beágyazható.

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

T ESZTELÉS. C ÉLJA Minél több hibát találjunk meg! Ahhoz, hogy az összes hibát fölfedezzük, kézenfekvőnek tűnik a programot az összes lehetséges bemenő.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Osztott rendszer: (kommunikáció csatornán keresztül). Osztott rendszer informális definíciója. • Egymástól elkülönülten létező program-komponensek egy.
NEMMONOTON KÖVETKEZTETÉS (NONMONOTONIC REASONING).
PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
Programozás III KOLLEKCIÓK 2..
Szélességi bejárás , 0.
Turbo Pascal Változók.
Bevezetés a Java programozásba
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
MI 2003/7 - 1 Az egyesítési algoritmus Minden kapitalista kizsákmányoló. Mr. Smith kapitalista. Mr. Smith kizsákmányoló.
Programozás II. 3. Gyakorlat C++ alapok.
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Logikai programozás Prolog.
Ellenőrző kérdések a)Auto-indexing enabled b)Auto-indexing disabled c)Nem eldönthető 1.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
SQL92 lehetőségek KL A tábla B tábla C view adatok VIEW működése utasítás: SELECT.. FROM A,B … SELECT.. FROM C Az adatok a hivatkozáskor állítódnak elő.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
Nem determinisztikusság és párhuzamosság. A nem determinisztikusság a párhuzamosságban gyökeredzik. Példa: S par  parbegin x:=0   x:=1   x:=2 parend;
WEB Technológiák ISAPI ME Általános Informatikai Tsz. dr. Kovács László.
WEB MES (webes gyártásirányító rendszer) Kiss Miklós (G-5S8)
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
PROLOG PROGRAMOZÁSI NYELV
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt.
Funkcionális programozás 2. gyakorlat
Felhasználók azonosítása és jogosultságai, személyre szabás Borsi Katalin és Fóti Marcell NetAcademia Oktatóközpont.
a Moodle autentikációjához a PTE FEEK-en
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
APEX BMF, II. félév.
SICStus Objects Objektum orientált kiterjesztés a SICStus Prolog nyelvhez Pereszlényi Attila Az előadás.
Web Architecture. Development of Computing Architectures Monolithic mainframe programming Client Server Real Client Server Web Programming.
Programozás. Programozási nyelvek: Gépi nyelv A számítástechnika őskorában egyedüli lehetőség volt a gép bitsorozattal való programozása. Minden processzor.
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Termelő-fogysztó modell. A probléma absztrakt megfogalmazása: informális leírás. Adott egy N elemű közösen használt tároló, N  1. Adott a folyamatoknak.
Logikai programozás 9.. Programok: EGY KIS ISMERET-TÁGÍTÁS – struktura.pl – operatorok.pl, precedencia.pl – útvonaltervezés – send_more_money (smm1.pl,
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Supervizor By Potter’s team SWENG 1Szarka Gábor & Tóth Gergely Béla.
A Visual Basic nyelvi elemei
Funkciós blokkok A funkciós blokkok áttekintése Az alkalmazás előnyei.
Kapcsolatok ellenőrzése
Algoritmizálás, adatmodellezés
Webes MES keretrendszer fejlesztése Kiss Miklós Dániel G-5S8 Tervezésvezető: Dr. Hornyák Olivér.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Palotás Ádám és Fodor Gergely Oracle Data Integrator Bemutató és gyakorlat
Félcsoport (semigroup) = ({s},{ *: s s  s [infix]}. semigroup is a type specification = sorts: s oprs: *: s s  s [infix] eqns: m 1, m 2, m 3  s (m 1.
Fájlkezelés Programozási tételek
Opencms modul fejlesztés Krizsán Zoltán. Modulok fajtái Nincs előírás, csak tipikus tennivalók: –Content type: új típus(oka)t vezet be. –Template: új.
Informatikai gyakorlatok 11. évfolyam
Analogical and Neural Computing Laboratory, Hungarian Academy of Sciences, Budapest 1 MATLAB u Hatékony, interaktív, tudományos és műszaki számítások,
Programozás III JPA.
Programstruktúrák. Program A program utasítások olyan sorozata, amely a számítógépen önállóan képes megoldani egy feladatot. A program háttértáron futtatható.
Programozási nyelvek Programozási alapismeretek
Logikai programozás 7..
Maven és Ant Build eszközök bemutatása
Meta-programozás (von) Neumann-elv Program-programozás (vírusok)
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Informatikai gyakorlatok 11. évfolyam
Előadás másolata:

Ciao prolog Kontra Gergely

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 programfejlesztői 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 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

4 Ciao prolog és a külvilág 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

5 Assert deklarációk – miért használjuk? 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

6 Assertions 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,N0), N is N0 + 1.

7 Assertions II. calls – előfeltétel :- calls is(term,arithexpression). success – pred + nem hiúsul meg :- success length(L,N) : list * var => 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 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)

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) => ground(B). ??? 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

9 Properties I. :- 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ő

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 szereplő 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 where/1 browse/2 update/0 ?- 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

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${},house${}], member(house${nation=>Owns_zebra,pet=>zebra}, Street), member(house${nation=>Drinks_water,drink=>water}, Street), member(house${drink=>coffee,color=>green}, Street), …

13 Egyéb fejlesztések III. :- use_module(library(terms_check)). ask(Term1,Term2). – Term1 és Term2 egyesíthető Term1-ben történő behelyettesítés nélkül instance(Term1, Term2) – Term1 Term2 egy példánya Ez is egy befejezetlen remekmű variant(Term1, Term2) – 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).

14 Korutinszerű 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, ő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

16 Szélességi bejárás :- 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: ?- 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ülő bejárás :- use_package(id). :- 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 Előszö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(Item)). pop(Item) :- var(Item), retract_fact(storage(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, működőképes modult kapunk! (igaz, hogy akkor egy darab vermünk lesz…) ?- use_package(objects). ?- use_class(library('class/examples/stack')). ?- St1 new stack,St2 new stack. St1 = stack(' '), St2 = stack(' ') ?, ?- St1:push(8),St2:push(9). St1 = stack(' '), St2 = stack(' ') ?- St1:top(I),St2:top(K). I = 8, K = 9, St1 = stack(' '), St2 = stack(' ') ? Inherit_class/1, inheritable/1, virtual/1, data/1, export/1

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