Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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).
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.