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

Hasonló előadás


Az előadások a következő témára: "PROLOG PROGRAMOZÁSI NYELV"— Előadás másolata:

1 PROLOG PROGRAMOZÁSI NYELV

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 PROGRAM ELEMEI alap adatstruktúrák termek
konstansok (atomok, ~ objektumkonstansok) a, a17, 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 PROGRAM ELEMEI Horn klózok (formulák) A  B1  B2  . . .  Bn
A, Bi: 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 : B1, B2, , Bn. feltételes állítás A. tényállítás B1, B2, , Bn. célállítás

5 Elsőrendű logika jelöléseivel:
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 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 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). ? - ú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)  KÖTÉSI LISTA STACK él(d, c) {Z=c} …. VISSZALÉPÉS

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

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 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 ILLESZTÉS (UNIFIKÁCIÓ)
X f(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 A PROLOGRÓL … összes megoldás előállítása kör a gráfban
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 A PROLOGRÓL … legjobb megoldás open lista ??
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 beépített predikátumok
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 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 Ae, A, Au részcélok A :- B1, B2, !, B3, … A :- … visszalépés korlátozása 1 1 FAIL FAIL 2

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 program végrehajtásának irányítása
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 program módosítása futás közben
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 A PROLOGRÓL … előnyök: hátrányok:
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 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 EGY DEKLARATÍV PROLOG PROGRAM
1. 2. 3. Ausztrália USA Japán zongora szaxofon hegedű John - + Márk Sam

22 EGY DEKLARATÍV PROLOG PROGRAM
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. 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 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"

Hasonló előadás


Google Hirdetések