Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

PROLOG PROGRAMOZÁSI NYELV. PROLOG 2 LOGIKAI PROGRAMOZÁS, PROLOG Logikai programozás alapgondolata: program megírása a logika nyelvén program végrehajtása.

Hasonló előadás


Az előadások a következő témára: "PROLOG PROGRAMOZÁSI NYELV. PROLOG 2 LOGIKAI PROGRAMOZÁS, PROLOG Logikai programozás alapgondolata: program megírása a logika nyelvén program végrehajtása."— Előadás másolata:

1 PROLOG PROGRAMOZÁSI NYELV

2 PROLOG 2 LOGIKAI PROGRAMOZÁS, PROLOG Logikai programozás alapgondolata: program megírása a logika nyelvén program végrehajtása tételbizonyítási algoritmussal Hagyományos programnyelvek/ logikai programozás Prolog: Programming in Logic 70-es évek, Európa logika, predikátumkalkulus, Horn klóz, rezolúció, lineáris input stratégia keresés, célvezérelt, mélységi keresés/visszalépéses keresés probléma redukció (és-vagy gráf) – összefüggések a részfák megoldásai között! – illesztés

3 PROLOG 3 PROLOG PROGRAM ELEMEI alap adatstruktúrák termek konstansok (atomok, ~ objektumkonstansok) a, a17, 127 változók (~ objektumváltozók) X, X23 funkcionális termek (~ függvények) a(X, Y), a(a(1), a(2)), a(d(X, Z), u) funktor + argumentumok (termek) A(X, Y) listák [1, 2, 3], [X| Y], [a(1), a(3)], [[1], [2, 3, 4]], [ ] fej (head), farok (tail)

4 PROLOG 4 PROLOG PROGRAM ELEMEI Horn klózok (formulák) A  B 1  B 2 ...  B n A, B i : predikátumok következmény (fej, head) feltétel (törzs, body) következmény részben egy predikátum feltétel részben predikátumok "és" kapcsolata nem lehet tagadás A :  B 1, B 2,..., B n.feltételes állítás A.tényállítás B 1, B 2,..., B n.célállítás

5 PROLOG 5 PROLOG PROGRAM ELEMEI Példa: Elsőrendű logika jelöléseivel:  x  l eleme(x, [x|l])  x  y  l eleme(x, l)  eleme(x, [y|l]) Prolog jelöléssel: eleme(X, [X|L]). eleme(X, [Y|L]) :  eleme(X, L). Prolog program impliciten összekapcsolt mondatok (klózok) minden változóhoz impliciten univerzális kvantor különböző klózok, különböző változók nincs globális változó (értékek illesztéssel)

6 PROLOG 6 PÉLDA: ÚTKERESÉS IRÁNYÍTOTT GRÁFON él(a, b).tények él(b, d). él(d, f).... (1)út(X, Y) :  él(X, Y).szabályok (2)út(X, Y) :  klózok között vagy él(X, Z), klóz törzs predikátumai között és út(Z, Y). Rekurzív szabály: fej predikátumszimbóluma a törzs predikátumszimbólumai között problémamegoldáshoz szükséges: triviális eset, amelyre a megoldás létezik (1) általános eset redukálása a triviális esetre (2) tail rekurzió – legkevesebb stack

7 PROLOG 7 ? - út(a, e) út/1{X=a, Y=e} él(a, e)  út/2{X=a, Y=e} él(a, b) {Z=b} út(b, e) út/1{X=b, Y=e} él(b, e)  út/2{X=b, Y=e} él(b, d) {Z=d} út(d, e) út/1{X=d, Y=e} él(d, e)  út/2{X=d, Y=e} él(d, f) {Z=f} út(f, e) …. él(g, e)  él(g, Z)  PÉLDA: ÚTKERESÉS IRÁNYÍTOTT GRÁFON él(a, b). él(b, d). él(d, f).... (1)út(X, Y) :  él(X, Y). (2)út(X, Y) :  él(X, Z), út(Z, Y). él(d, c){Z=c} …. VISSZALÉPÉS KÖTÉSI LISTA STACKSTACK

8 PROLOG 8 KLÓZOK KEZELÉSE visszalépés (retry)sikertelen kilépés (fail) sikeres kilépés (success)belépés (enter)

9 PROLOG 9 KÖVETKEZTETÉS PROLOGBAN mélységi keresés (nem teljes) célállítás igazolása részcélok igazolásával (probléma redukció) visszalépéses keresés (időben meghatározott visszalépés) klózok feltételrészének vizsgálata: balról jobbra klózok alkalmazása: leírási sorrend szerint

10 PROLOG 10 ILLESZTÉS (UNIFIKÁCIÓ) Nincs kitűntetett input/output – stack: illesztési lista két konstans illeszthető, ha azonosak a  a a  a1 a  17 változó bármivel illeszthető X  18 a  Y Z  a(13) X  Y két funkcionális term illeszthető, ha funktoruk azonos argumentumszámuk azonos argumentumaik illeszthetők a(17)  a(18) a(X)  a(7) a(S, 3)  a(Z) a(A, B)  a(3, 4) a(A, A)  a(t, u) a(X)  a(a(a(7)))

11 PROLOG 11 ILLESZTÉS (UNIFIKÁCIÓ) Xf(X)  occur check kihagyva az unifikációból nem helyes mintaillesztés szerepe: kiválasztódik az adott eljáráshívásra alkalmazható eljárásdefiníció paraméterátadás stack: kötési lista döntési helyek

12 PROLOG 12 A PROLOGRÓL … összes megoldás előállítása célállítás, fail. út(a, X), fail. X?? út(a, X), write("Út vezet a-ból ", X, "-be.\n"), fail. kör a gráfban végtelen út kiküszöbölése: már vizsgált pontok megőrzése út(X, Y, P) :  él(X, Y), not(eleme(Y, P)). út(X, Y, P) :  él(X, Z), not(eleme(Z, P), út(Z, Y, [Z|P]).

13 PROLOG 13 A PROLOGRÓL … legjobb megoldás megoldások gyűjtése ?? – globális változó nincs – dinamikus adatbáziskezelő predikátumok értékelés open lista ?? egy lehetséges válasz + választási (visszatérési) pontok mindig egyetlen megoldási úttal foglalkozik (megfelelő helyettesítésekkel) visszalépésnél: bizonyos kötések megszűntetése

14 PROLOG 14 A PROLOGRÓL … beépített predikátumok aritmetikai predikátumok +, , *, , abs, sin,... = (is)összehasonlítás X = 3+4, Y = X*15, X = X+1, 7 = X /2 ki- és bevitel write, read,... kifejezéskezelő predikátumok concat, fronttoken, str_int,... dinamikus adatbáziskezelő predikátumok assert, retract,... vezérlési predikátumok cut - ! fail

15 PROLOG 15 Ae, A, Au részcélok A :- B1, B2, !, B3, … A :- … visszalépés korlátozása A PROLOGRÓL … cut - ! (/) mindig igaz predikátum backtrack során a cut-ot tartalmazó részcél hamis lesz „felégeti a hidat maga mögött” Ae, A, Au részcélok A :- B1, B2, B3, … A :- … cut nélküli visszalépés FAIL 2 1 1

16 PROLOG 16 PÉLDA: ÚTKERESÉS IRÁNYÍTOTT GRÁFON él(a, b). él(b, d). él(d, f).... út(X, Y) :  él(X, Y). út(X, Y) :  él(X, Z), út(Z, Y). ?- út(a,X). ! nélkül – összes út a-ból (10 megoldás) ! használatával:  első megtalált út (1 megoldás) – (a, b)  1 él hosszú utak a-ból (2 megoldás) – (a, b), (a, c)   + első 2 él hosszú út a-ból (3 megoldás) –  + (a, d)   + első ágon levő utak + ág csomópontjaiból 1 élhosszal tovább – (7 megoldás) -  + (a, f), (a, g), (a, c), (a, c)  összes út (10 megoldás)  

17 PROLOG 17 A PROLOGRÓL … tagadás tagadás, mint fail operátor not P  nincs elég információ P bizonyításához meta-programok program végrehajtásának irányítása klózok sorrendje – irányítja az elágazásokat klózokon belüli predikátumok sorrendje – meghatározza a részcélok sorrendjét kérdésben levő klózok sorrendje – meghatározza a részcélok sorrendjét visszalépésre kényszerítés (fail) visszalépés korlátozása (cut, !) – fa egy részének letiltása

18 PROLOG 18 A PROLOGRÓL … program módosítása futás közben adat/program: klóz retract(klóz/tény), assert(klóz/tény),... programstruktúrák metaprogramok not(A) :  A, !, fail. not(A). if(A, B, C) :  A, !, B. if(A, B, C) :  C. then(A, B) :  A, B. else(A, B) :  not(A), B. párhuzamos prologok klózok kiosztása a processzorok között CSProlog

19 PROLOG 19 A PROLOGRÓL … előnyök: jól-olvashatóság („beszédes” predikátum- és változónevek) könnyű módosíthatóság a problémát nem nekünk kell megoldani (beépített tételbizonyító algoritmus) hátrányok: nem minden probléma fejezhető ki jól logikai formalizmussal (pl. numerikus számítások) hiányos ismeretek kezelésére nem képes (monoton logikát használ)

20 PROLOG 20 EGY DEKLARATÍV PROLOG PROGRAM Három zenész problémája egy nemzetközi zenekar 3 zenésze szólót játszik egy darabban, mindenki egyszer a zongorista játszik először John szaxofonon játszik az ausztrál előtt Márk – aki az USA-ból jött – a hegedűs előtt játszik egy szólista Japánból jött egy szólistát Sam-nek hívnak Ki honnan jött, milyen hangszeren és milyen sorrendben játszik?

21 PROLOG 21 EGY DEKLARATÍV PROLOG PROGRAM Ausztrália USA Japán zongora szaxofon hegedű John - + Márk + Sam zongora + szaxofon hegedű Ausztrália - USA Japán

22 PROLOG 22 S a probléma megoldása ha S három szólistából áll és S első tagja X zongorán játszik és S-nek van két rendezett tagja Y, Z és Y neve John és Y szaxofonon játszik és Z Ausztráliából jött és S-nek van két rendezett tagja Y1, Z1 és Y1 neve Márk és Y1 az USA-ból jött és Z1 hegedűn játszik és S egy tagja U Japánból jött és S egy tagjának V neve Sam. EGY DEKLARATÍV PROLOG PROGRAM megoldás(S) if szólisták(S), első(X,S), játszik(X,zongora), rendezett_tag (Y,Z,S), név(Y,john), játszik(Y,szaxofon), ország(Z,ausztrália), rendezett_tag (Y1,Z1,S), név(Y1,márk), ország(Y1,usa), játszik(Z1,hegedű), tag(U,S), ország(U,japán), tag(V,S), név(V,sam).

23 PROLOG 23 EGY DEKLARATÍV PROLOG PROGRAM megoldás(S) if szólisták(S), első(X,S), játszik(X,zongora), rendezett_tag (Y,Z,S), név(Y,john), játszik(Y,szaxofon), ország(Z,ausztrália), rendezett_tag (Y1,Z1,S), név(Y1,márk), ország(Y1,usa), játszik(Z1,hegedű), tag(U,S), ország(U,japán), tag(V,S), név(V,sam). szólisták(sz(_,_,_)). első(X,sz(X,_,_)). rendezett_tag(X,Y,sz(X,Y,_)). rendezett_tag(X,Y,sz(_,X,Y)). rendezett_tag(X,Y,sz(X,_,Y)). tag(X,sz(X,_,_)). tag(X,sz(_,X,_)). tag(X,sz(_,_,X)). név(szólista(N,_,_),N). játszik(szólista(_,H,_),H). ország(szólista(_,_,O),O).


Letölteni ppt "PROLOG PROGRAMOZÁSI NYELV. PROLOG 2 LOGIKAI PROGRAMOZÁS, PROLOG Logikai programozás alapgondolata: program megírása a logika nyelvén program végrehajtása."

Hasonló előadás


Google Hirdetések