Kef laio 7 Logikìc Programmatismìc: H Gl¸ssa Prologcgi.di.uoa.gr/~prondo/LANGUAGES/ch6.pdf ·...
Transcript of Kef laio 7 Logikìc Programmatismìc: H Gl¸ssa Prologcgi.di.uoa.gr/~prondo/LANGUAGES/ch6.pdf ·...
Kef�laio 7
Logikìc Programmatismìc:
H Gl¸ssa Prolog
P. Rontogi�nnhc
Ejnikì kai Kapodistriakì Panepist mio Ajhn¸n
Tm ma Plhroforik c kai Thlepikoiwni¸n
P. Rontogi�nnhc Logikìc Programmatismìc
Basik� StoiqeÐa Gl¸ssac Prolog
OrismoÐ (statements): EpiteloÔn to rìlo entol¸nstic klassikèc gl¸ssec programmatismoÔ
Gegonìta
Kanìnec
Erwt seic
'Oroi (terms): Monadik dom dedomènwn Prolog
P. Rontogi�nnhc Logikìc Programmatismìc
Gegonìc
EÐnai to aploÔstero eÐdoc orismoÔ, pou uposthrÐzei hProlog.
Parèqei trìpo èkfrashc thc sqèshc pou isqÔeian�mesa se ontìthtec.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma Gegonìtoc
Gegonìc
father (john, mary).
Ekfr�zei ìti o john eÐnai patèrac thc mary ìti h sqèshfather isqÔei an�mesa sta �toma john kai mary.
P. Rontogi�nnhc Logikìc Programmatismìc
OrismoÐ
Sqèseic ìpwc to father onom�zontaikathgor mata.
Oi ontìthtec mary kai john onom�zontai orÐsmatatou kathgor matoc.
'Ena kathgìrhma mazÐ me ta orÐsmata pouperilamb�nei onom�zetai atomikìc tÔpoc.
P. Rontogi�nnhc Logikìc Programmatismìc
Sqèsh Plus
SÔnolo gegonìtwn
plus(0,0,0).
plus(0,1,1).
plus(1,0,1).
plus(2,0,2).
plus(0,2,2).
P. Rontogi�nnhc Logikìc Programmatismìc
Sqèsh Plus
OrÐzei thn prìsjesh fusik¸n arijm¸n
Den mporeÐ na oristeÐ apokleistik� me th qr shgegonìtwn
ApaiteÐtai �peiroc arijmìc gegonìtwn, (ìpwc
parap�nw)
P. Rontogi�nnhc Logikìc Programmatismìc
Metablhtèc
H Prolog epitrèpei th qr sh metablht¸n se
Gegonìta, kanìnec kai erwt seic
Oi metablhtèc arqÐzoun p�nta me kefalaÐo gr�mma
H qr sh metablht¸n epitrèpei thn èkfrash sunìlougegonìtwn
Par�deigma
plus(0,X,X).
Ekfr�zei thn idiìthta tou oudèterou stoiqeÐou thcprìsjeshc.
P. Rontogi�nnhc Logikìc Programmatismìc
Erwt seic
Parèqoun th dunatìthta exagwg c plhroforÐac apìèna logikì prìgramma.
DiereunoÔn thn isqÔ miac sqèshc an�mesa seorismènec ontìthtec.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Er¸thsh
?-father(john, mary).
Diereun� an h sqèsh father isqÔei an�mesa sta �tomajohn kai mary.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Er¸thsh
An èqei dojeÐ sthn Prolog to gegonìc:
father(john, mary).
Tìte h ap�nthsh sthn er¸thsh ?-father(john, mary).
ja eÐnai YES.
P. Rontogi�nnhc Logikìc Programmatismìc
Metablhtèc kai Erwt seic (1)
Er¸thsh
?-father(X,mary).
Diab�zetai wc: {Up�rqei k�poio prìswpo X to opoÐo eÐnaipatèrac thc mary?}
P. Rontogi�nnhc Logikìc Programmatismìc
Metablhtèc kai Erwt seic (2)
MÐa er¸thsh mporeÐ na epistrèyei perissìterec apìmÐa apant seic.
Par�deigma
An èqoume d¸sei sthn Prolog dÔo gegonìta
father(john, mary).
father(john, ann).
Tìte h er¸thsh: ?-father(john, X).
Ja epistrèyei dÔo lÔseic X=mary kai X=ann
P. Rontogi�nnhc Logikìc Programmatismìc
SÔnjetec Erwt seic
Er¸thsh
?-father(X,mary), father(X,ann)
Anazht� to prìswpo pou eÐnai patèrac thc mary kai thcann.
H sÔnjeth er¸thsh apoteleÐtai apì upoerwt seic(kl seic). Oi kl seic se mÐa sÔnjeth er¸thshqwrÐzontai metaxÔ touc me kìmma, pou èqei thn ènnoialogikoÔ {kai}.
Gia na alhjeÔei mÐa sÔnjeth er¸thsh prèpei naalhjeÔoun ìlec oi aploÔsterec erwt seic, pou thnapoteloÔn.
P. Rontogi�nnhc Logikìc Programmatismìc
Kanìnec
Epitrèpoun ton orismì nèwn sqèsewn wc sun�rthsh�llwn sqèsewn.
Par�deigma
son(X,Y):-father(Y,X), male(X).
OrÐzei th sqèsh son wc sun�rthsh twn sqèsewn father
kai male.Diab�zetai wc: {O X eÐnai giìc tou Y an o Y eÐnai patèractou X kai o X eÐnai gènouc arsenikoÔ}.
To sÔmbolo {:-} diab�zetai san {e�n}, en¸ to {,}wc {kai}.
P. Rontogi�nnhc Logikìc Programmatismìc
AnadromikoÐ Kanìnec
Par�deigma
ancestor(X,Y):-parent(X,Y).
ancestor(X,Y):-parent(X,Z), ancestror(Z,Y).
H sqèsh ancestor (prìgonoc) mporeÐ na orisjeÐ me qr shdÔo kanìnwn, ek twn opoÐwn o ènac eÐnai anadromikìc.
Genik�, ènac kanìnac èqei th morf
H:-B1,...,Bn.
ìpou to H lègetai kefal tou kanìna kai oi atomikoÐtÔpoi B1,...,Bn, apoteloÔn to s¸ma tou kanìna.
P. Rontogi�nnhc Logikìc Programmatismìc
'Oroi
Basik dom ston logikì programmatismì
Stajer� (ìpwc john), metablht (ìpwc X) sÔnjetocìroc
O sÔnjetoc ìroc apoteleÐtai apì èna sunarthsiakì
sÔmbolo (functional symbol), pou efarmìzetai se
akoloujÐa apì ìrouc.
Par�deigma
list(a,nil)
ìpou list to sunarthsiakì sÔmbolo kai a,nil stajerèc
P. Rontogi�nnhc Logikìc Programmatismìc
'Oroi
Qr sh gia kwdikopoÐhsh sÔnjetwn morf¸nplhroforÐac
Par�deigma
Orismìc kathgor matoc book, pou lamb�nei sanparamètrouc ìrouc gia perigraf twn qarakthristik¸nthc ènnoiac biblÐo. Me ton trìpo autì dhmiourgeÐtai mÐaapl b�sh dedomènwn:
book(author(surname(stoll), name(robert)),
subject(logic)).
book(author(surname(kleene), name(steven)),
subject(mathematics)).
P. Rontogi�nnhc Logikìc Programmatismìc
'Oroi
Diafor� an�mesa sta
book (ìnoma kathgor matoc)
author, surname, name, subject (sunarthsiak�sÔmbola)
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Er¸thsh
Anaz thsh onomatepwnÔmwn, pou èqoun gr�yei biblÐa selogik
?-book(author(surname(X), name(Y)),
subject(logic)).
Er¸thsh
An den endiafèroun ta mikr� onom�twn suggrafèwn, her¸thsh mporeÐ na tejeÐ:
?-book(author(surname(X), ), subject(logic)).
'Opou me { } sumbolÐzontai oi ìroi twn opoÐwn h tim denmac endiafèrei.
P. Rontogi�nnhc Logikìc Programmatismìc
'Oroi
Graf programm�twn ìqi mìno me qr sh kanìnwn kaigegonìtwn
Par�deigma
Orismìc thc sqèshc nat(X), h opoÐa alhjeÔei ìtan Qfusikìc arijmìc.
'Enac trìpoc eÐnai na sumfwnhjeÐ h anapar�stashtwn fusik¸n arijm¸n antÐ gia 0, 1, 2, . . . me0, s(0), s(s(0)), . . .
To sunarthsiakì sÔmbolo s ekfr�zei thn ènnoia tou{epìmenou arijmoÔ}.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
To prìgramma gia to nat gr�fetai:
Prìgramma
nat(0).
nat(s(X)):-nat(X).
Parìmoia orÐzontai kai �llec sqèseic p�nw se fusikoÔcarijmoÔc.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
To plus(X,Y,Z) eÐnai alhjèc an to Z eÐnai to �jroismatwn X kai Y.
Prìgramma
plus(0,X,X).
plus(s(X),Y,s(Z)):-plus(X,Y,Z).
Jètontac thn er¸thsh: ?-plus(s(0), s(0),K).
PaÐrnoume thn ap�nthsh K = s(s(0)).
P. Rontogi�nnhc Logikìc Programmatismìc
OrÐsmata
Sthn Prolog den gÐnetai kajorismìc poia apì taorÐsmata enìc kathgor matoc eÐnai eÐsodoi kai poiaèxodoi.
Poll� progr�mmata èqoun diaforetikèc qr seic
Par�deigma: An tejeÐ h er¸thsh:?-plus(X,s(0), s(s(s(0)))).
DÐnetai h ap�nthsh X=s(s(0)), pou antistoiqeÐ stonarijmì, pou lamb�netai an afairèsoume apì to trÐtoìrisma to deÔtero.
P. Rontogi�nnhc Logikìc Programmatismìc
Ektèlesh Programm�twn Prolog
'Estw to prìgramma
Prìgramma
grandparent(X,Y):-parent(X,Z), parent(Z,Y).
parent(tom,jim).
parent(jim,george).
'Otan tejeÐ h er¸thsh:?-grandparent(A,B). o mhqanismìcektèleshc thc Prolog ekteleÐ anaz thsh lÔsewn thc morf ctou dèntrou, pou akoloujeÐ.
P. Rontogi�nnhc Logikìc Programmatismìc
Dèntro ektèleshc thc er¸thshc
grandparent(A,B)
parent(A,Z),parent(Z,B)
parent(jim,B)
�
{A=tom,Z=jim}
parent(george,B)
fail
{A=jim,Z=george}
P. Rontogi�nnhc Logikìc Programmatismìc
Ektèlesh Programm�twn Prolog
Arqik� o mhqanismìc thc Prolog anazht� stoprìgramma kathgìrhma me to ìnoma grandparent
¸ste na tairi�zei me th dedomènh er¸thsh.
Mìlic brejeÐ prìtash, pou afor� autì tokathgìrhma, antikajist� thn dedomènh er¸thsh me tos¸ma thc prìtashc kai dhmiourgeÐtai nèa (sÔnjeth)er¸thsh parent(A,Z), parent(Z,B).
P. Rontogi�nnhc Logikìc Programmatismìc
Mhqanismìc Ektèleshc Prolog
'Estw ìti èqoume èna prìgramma kai mÐa er¸thsh thcmorf c ?− A1, . . . , An. Tìte:
H Prolog exet�zei e�n ikanopoioÔntai ìloi oi stìqoiA1, . . . , An xekin¸ntac apì to A1 kai phgaÐnontac procto An.
Gia na ikanopoi sei èna apì ta Ai h Prolog,
dialègei thn pr¸th prìtash sto prìgramma thc
opoÐac h kefal tairi�zei me to Ai,
kai antikajist� to Ai me to s¸ma thc prìtashc
aut c (afoÔ pr¸ta to tropopoi sei kat�llhla).
H diadikasÐa suneqÐzetai mèqri na mhn up�rqei plèon�llh kl sh, pou na prèpei na ikanopoihjeÐ.
P. Rontogi�nnhc Logikìc Programmatismìc
Apl� Anadromik� Progr�mmata se Prolog
Me th qr sh ìrwn gr�fontai apl� kai ekfrastik�progr�mmata, ìpwc to
Prìgramma
plus(0,X,X).
plus(s(X),Y,s(Z)):-plus(X,Y,Z).
'Omoia orÐzetai gia ton pollaplasiasmì fusik¸narijm¸n
Prìgramma
times(0,X,0).
times(s(X),Y,Z):-times(X,Y,W), plus(W,Y,Z).
P. Rontogi�nnhc Logikìc Programmatismìc
Sqìlia
H parap�nw sqèsh qrhsimopoieÐ dÔo basik�axi¸mata tou pollaplasiasmoÔ:
0 · X = 0(X + 1) · Y = X · Y + Y
O orismìc tou pollaplasiasmoÔ qrhsimopoieÐ autìnthc prìsjeshc
P. Rontogi�nnhc Logikìc Programmatismìc
Majhmatikèc Sqèseic Fusik¸n Arijm¸n
Me qr sh tou orismoÔ tou pollaplasiasmoÔ dÐnetai hsqèsh gia to paragontikì enìc fusikoÔ arijmoÔ
Prìgramma
factorial(0,s(0)).
factorial(s(N),F):-factorial(N,F1),times(s(N),F1,F).
P. Rontogi�nnhc Logikìc Programmatismìc
Majhmatikèc Sqèseic Fusik¸n Arijm¸n
Sqèsh between(X,Y,Z): alhjeÔei ìtan X eÐnai ènacfusikìc arijmìc mikrìteroc Ðsoc apì ton Y kai o Y eÐnaimikrìteroc Ðsoc apì ton Z.
Prìgramma
between(0,0,Z).
between(0,s(Y),s(Z)):-between(0,Y,Z).
between(s(X),s(Y),s(Z)):-between(X,Y,Z).
P. Rontogi�nnhc Logikìc Programmatismìc
Sqìlia
Oi fusikoÐ arijmoÐ anaparÐstantai me polÔ pio bolikìtrìpo sthn Prolog (ìpwc kai stic upìloipec gl¸ssecprogrammatismoÔ).
H anapar�stash, pou qrhsimopoi jhke staparap�nw progr�mmata den eÐnai genik� bolik kaiapotelesmatik . Uiojet jhke gia na deiqjoÔn oiarqikèc dunatìthtec thc Prolog.
P. Rontogi�nnhc Logikìc Programmatismìc
Anadromikìc Programmatismìc me LÐstec
LÐsta
PolÔ qr simh dom dedomènwn gia programmatismì seProlog
Ken - sumbolÐzetai me []
Perièqei stoiqeÐa, p.q. h [a,b,c] eÐnai mh ken lÐsta
To pr¸to stoiqeÐo lÐstac onom�zetai kefal (head)H lÐsta pou prokÔptei an afairèsoume thn kefal ,
onom�zetai our� (tail)O telest c | apoteleÐ eidik anapar�stash, pou
deÐqnei �mesa thn kefal kai thn our� miac lÐstac. H
lÐsta [a,b,c] gr�fetai wc [ a|[b,c] ] kai h [a] wc
[a|[ ]].
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.1
Oi lÐstec Prolog mporoÔn na perièqoun sa stoiqeÐatouc kai �llec lÐstec, all� kai polÔplokouc ìrouc,ìpwc
[[ ]] epitrept lÐsta
[[1,X], s(s(X))]
Oi [ a| [ 1|[2] ] ] kai [X,Y|[a]] eÐnai isodÔnamec metic lÐstec [a,1,2] kai [X,Y,a] antÐstoiqa.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.2
H sqèsh member(X,Y) eÐnai alhj c, ìtan to X eÐnaistoiqeÐo thc lÐstac Y.
Prìgramma
member(X,[X|Y]).
member(X,[Y|Z]):-member(X,Z).
To nìhma tou progr�mmatoc eÐnai: {To X eÐnai mèloc miaclÐstac an eÐnai h kefal thc lÐstac an eÐnai mèloc thcour�c thc lÐstac}.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.3
H sqèsh append(X,Y,Z) eÐnai alhj c, ìtan to Z eÐnai hlÐsta, pou prokÔptei apì thn sunènwsh twn list¸n X kaiY.
Prìgramma
append([ ],Y,Y).
append([X|Xs],Ys,[X|Zs]):-append(Xs,Ys,Zs).
H dom tou parap�nw progr�mmatoc eÐnai parìmoia meaut tou progr�mmatoc gia ton orismì thc sqèshc plus.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.4
Suqn� ston programmatismì se PrologqrhsimopoioÔntai aplèc sqèseic, dh orismènec gia nagrafoÔn pio polÔploka progr�mmata.
Sqèseic ìpwc h member kai h append
qrhsimopoioÔntai sqedìn se opoiod pote meg�loprìgramma grafteÐ se Prolog.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.4
Sqèsh reverse(X,Y) orÐzetai sa sun�rthsh thc append.EÐnai alhj c, ìtan h lÐsta Y eÐnai h antÐstrofh thclÐstac X:
Prìgramma
reverse([ ],[ ]).
reverse([X|Xs],Ys):-reverse(Xs,Rs),
append(Rs,[X],Ys).
To nìhma tou parap�nw progr�mmatoc eÐnai: {HantÐstrofh thc ken c lÐstac eÐnai h ken lÐsta.H antÐstrofh mh-ken c lÐstac mporeÐ na paraqjeÐantistrèfontac thn our� thc kai proskoll¸ntac stotèloc thc antestrammènhc our�c thn kefal thc arqik clÐstac.}
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.4
To prohgoÔmeno par�deigma mporeÐ na grafeÐ kai qwrÐcth qr sh thc append, all� me prosj kh enìc bohjhtikoÔkathgor matoc tou reverse1, pou diajètei èna epiplèonìrisma:
Prìgramma
reverse(Xs, Ys):-reverse1(Xs,[ ],Ys).
reverse1([ ],Ys, Ys).
reverse1([X|Xs],A,Ys):-reverse1(Xs,[X|A],Ys).
To ìrisma A onom�zetai susswreut c (accumulator)diìti susswreÔei b ma-b ma to telikì apotèlesma (dhlad thn antÐstrofh lÐsta).
P. Rontogi�nnhc Logikìc Programmatismìc
Anadromikìc Programmatismìc me Dèntra
Dèntra
PolÔ qr simoc tÔpoc dedomènwn
AnaparÐstantai me qr sh ìrwn (monadik dom dedomènwn Prolog)
Qr sh tou sunarthsiakoÔ sumbìlou tree me treic
paramètrouc:
tree(Element, Left, Right)
To stoiqeÐo Element eÐnai h rÐza tou sugkekrimènou
dèntrou, to Left to aristerì upìdentro kai to Right
to dexÐ upodèntro.To kenì dèntro anaparÐstatai me th stajer� void.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Par�deigma
Dèntro me koruf a, aristerì paidÐ b kai dexÐ paidÐ cgr�fetai wc:
tree(a, tree(b,void,void), tree(c,void, void))
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Prìgramma gia èlegqo tou an ènac dedomènoc ìroc eÐnaipr�gmati duadikì dèntro (an�logo tou kathgor matocnat)
Prìgramma
binary tree(void).
binary tree(tree(E,L,R)):-binary tree(L),
binary tree(R).
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Prìgramma gia èlegqo tou an èna dedomèno stoiqeÐoan kei se èna dèntro ìqi. To prìgramma eÐnai an�logome to member , pou orÐsjhke gia tic lÐstec:
Prìgramma
tree member(X, tree(X, , )).
tree member(X, tree(Y,L,R)):-tree member(X,L).
tree member(X, tree(Y,L,R)):-tree member(X,R).
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
To parap�nw prìgramma elègqei an èna dedomènostoiqeÐo eÐnai tautìshmo me thn koruf tou dedomènoudèntrou.
An nai, to prìgramma stamat� me epituqÐa.
An ìqi, to prìgramma suneqÐzei anadromik� thdiereÔnhsh sto aristerì kai to dexÐ upodèntro.
P. Rontogi�nnhc Logikìc Programmatismìc
Kathgor mata
Ousiastik� {diasqÐzoun} èna dedomèno dèntro me mÐaprokajorismènh seir�.
To apotèlesma thc di�sqishc epistrèfetai se mÐalÐsta.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
H preorder di�sqish enìc duadikoÔ dèntrou orÐzetai apì toakìloujo kathgìrhma:
Prìgramma
preorder(void,[ ]).
preorder(tree(X,L,R),Xs):-preorder(L,Ls),
preorder(R,Rs),
append([X|Ls],Rs,Xs).
Kat� thn preorder di�sqish enìc dèntrou katagr�fetaiarqik� h rÐza tou dèntrou kai katìpin episkeptìmasteanadromik� pr¸ta to aristerì upodèntro kai met� to dexÐ.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Me an�logo trìpo gr�fetai prìgramma, pou ulopoieÐ thndi�sqish inorder:
Prìgramma
inorder(void,[ ]).
inorder(tree(X,L,R),Xs):-inorder(L,Ls),
inorder(R,Rs),
append(Ls,[X|Rs],Xs).
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
Prìgramma gia thn postorder di�sqish:
Prìgramma
postorder(void,[ ]).
postorder(tree(X,L,R),Xs):-postorder(L,Ls),
postorder(R,Rs),
append(Ls,Rs,Ms),
append(Ms,[X],Xs).
Ta parap�nw progr�mmata diafèroun mìno wc proc tontrìpo, pou gÐnetai h sunènwsh twn epimèroucapotelesm�twn (append).
P. Rontogi�nnhc Logikìc Programmatismìc
Telestèc
Sunarthsiak� sÔmbola
Qr sh se epexergasÐa pio polÔplokwn dom¸n apì ìtioi lÐstec kai ta dèntra
Sthn èkfrash 1+3, to + eÐnai telest c
IsodÔnamh èkfrash +(1,3) kai ìqi o arijmìc 4, ìpwc
sumbaÐnei se �llec gl¸ssec programmatismoÔ
H prìsjesh ja pragmatopoioÔtan an o ìroc 1+3
tan ìrisma sto eidikì kathgìrhma is thc Prolog gia
upologismì arijmhtik¸n ekfr�sewn
P. Rontogi�nnhc Logikìc Programmatismìc
Telestèc (2)
Oi telestèc +,-,*,/,... den lamb�noun sugkekrimènonìhma apì thn Prolog
QrhsimopoioÔntai gia na grafoÔn efarmogèc mekomyì kai sunoptikì trìpo
Sto epìmeno par�deigma oi telestècqrhsimopoioÔntai, gia th diatÔpwsh thc diadikasÐacparag¸gishc sunart sewn
P. Rontogi�nnhc Logikìc Programmatismìc
Parag¸gish
Prìgramma
derivative(N,X,0):-nat(N).
derivative(X,X,s(0)).
derivative(X^s(N),X,s(N)*(X^N)).
derivative(sin(X),X,cos(X)).
derivative(cos(X),X,-sin(X)).
derivative(e^X,X,e^X).
derivative(log(X),X,1/X).
P. Rontogi�nnhc Logikìc Programmatismìc
Parag¸gish
Prìgramma
derivative(F+G, X, DF+DG):-
derivative(F,X,DF),derivative(G,X,DG).
derivative(F-G, X, DF-DG):-
derivative(F,X,DF),derivative(G,X,DG).
derivative(F*G, X, F*DG+G*DF):-
derivative(F,X,DF),derivative(G,X,DG).
derivative(1/F, X, -DF/(F*F)):-
derivative(F,X,DF).
derivative(F/G, X, G*DF-F*DG/(G*G)):-
derivative(F,X,DF), derivative(G,X,DG).
P. Rontogi�nnhc Logikìc Programmatismìc
Parag¸gish
To prìgramma upologÐzei thn par�gwgo mÐacmeg�lhc kathgorÐac sunart sewn.
Oi telestèc, pou qrhsimopoioÔntai ekfr�zoun pr�xeicmetaxÔ sunart sewn.
Thn èkfrash F*G, o programmatist c thnkatalabaÐnei san pollaplasiasmì sunart sewn kaiautì eÐnai dunatì kaj¸c h Prolog den dÐneiprokajorismèno nìhma se sÔmbola, ìpwc to *.
P. Rontogi�nnhc Logikìc Programmatismìc
Parag¸gish
An sto parap�nw prìgramma dojeÐ h er¸thsh
?-derivative(cos(x)*(x^s(s(0))),x,D).
H opoÐa anazht� thn par�gwgo thc sun�rthshc cos x · x2
Ja l�boume thn ap�nthsh
D=cos(x)*(s(s(0))*x^s(0))+x^s(s(0))*(-sin(x))
H opoÐa antistoiqeÐ sth sun�rthsh cos x · 2x + x2 · (− sin x).
P. Rontogi�nnhc Logikìc Programmatismìc
Arijmhtikèc pr�xeic kai Prolog
K�je gl¸ssa programmatismoÔ parèqei idiaÐtereceukolÐec sth qr sh kai epexergasÐa arijm¸n.
H Prolog diajètei
Eidik� kathgor mata, gnwst� wc kathgor matasust matoc (system predicates).
P. Rontogi�nnhc Logikìc Programmatismìc
Kathgor mata Prolog
Basikì kathgìrhma to is, pou qrhsimopoieÐtai sthmorf V is E.
H Prolog upologÐzei thn tim tou E kai an aut h tim sumfwneÐ me to V, tìte epitugq�nei.
An V metablht , tìte lamb�nei thn tim tou E.
'Otan E perièqei metablhtèc me �gnwsth tim thstigm thc ektèleshc, o diermhnèac thc Prolog dÐneim numa l�jouc.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.5
H er¸thsh
?-8 is 5+3 epitugq�nei
H er¸thsh
?-5+3 is 8 apotugq�nei
diìti h Prolog blèpei to aristerì mèloc thc san tonìro +(5,3) kai den upologÐzei thn tim tou.
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma
H er¸thsh
?-X is 5+3
ja d¸sei thn ap�nthsh Q = 8
H er¸thsh
?-X is 2+Y
ja d¸sei m numa l�jouc,diìti h arijmhtik tim tou dexioÔ mèlouc den mporeÐna upologisjeÐ lìgw thc metablht c Y.
P. Rontogi�nnhc Logikìc Programmatismìc
Kathgor mata thc Prolog gia arijmhtikèc
pr�xeic
X =:= Y Oi arijmhtikèc timèc twn X kai Y eÐnai ÐdiecX == Y Oi arijmhtikèc. timèc twn X kai Y eÐnai
diaforetikècX < Y H arijmhtik tim tou X eÐnai mikrìterh
apì aut tou Y
X =< Y H arijmhtik tim tou X eÐnai mikrìterh Ðsh apì aut tou Y
X > Y H arijmhtik tim tou X eÐnai megalÔterhapì aut tou Y
X >= Y H arijmhtik tim tou X eÐnai megalÔterh Ðsh apì aut tou Y
P. Rontogi�nnhc Logikìc Programmatismìc
Kathgor mata
Me qr sh twn prohgoÔmenwn kathgorhm�twn mporoÔnna xanagrafoÔn kathgor mata pou orÐsjhkan meqr sh twn ìrwn
(p.q. 0, s(0), s(s(0)) . . .)
P. Rontogi�nnhc Logikìc Programmatismìc
Kathgor mata
To kathgìrhma plus mporeÐ na orisjeÐ wc:
Prìgramma
plus(X,Y,Z):-Z is X+Y
Meionèkthma: Q�netai h antistreyimìthta k�poiwnprogramm�twn
P. Rontogi�nnhc Logikìc Programmatismìc
Kathgor mata
H er¸thsh
?-plus(A,B,8)
ja d¸sei m numa l�jouc (kai ìqi ìla ta zeÔghfusik¸n me �jroisma 8).
Autì sumbaÐnei giatÐ h parap�nw er¸thsh an�getaiapì to mhqanismì thc Prolog sthn er¸thsh
?-8 is A+B
P. Rontogi�nnhc Logikìc Programmatismìc
Kathgor mata
Me qr sh kathgorhm�twn sust matoc mporoÔn nagrafoÔn progr�mmata, pou ekteloÔn arijmhtikèc pr�xeicme to sunhjismèno trìpo:
Prìgramma
sumlist([ ],0).
sumlist([I|L],Sum):-sumlist(L,S), Sum is S+I.
P. Rontogi�nnhc Logikìc Programmatismìc
Apokop
Progr�mmata Prolog
Anapotelesmatik�, giatÐ to dèntro
anaz thshc eÐnai arket� meg�lo
Endiafèron
'Uparxh lÔshc probl matoc
'Oqi gia thn posìthta eÐdoc lÔsewn
P. Rontogi�nnhc Logikìc Programmatismìc
Apokop
Den eÐnai aparaÐthto o mhqanismìc ektèleshc thcProlog na diasqÐsei olìklhro to dèntro anaz thshc,all� èna mèroc tou.
O programmatist c kajodhgeÐ to mhqanismìanaz thshc proc apofug peritt¸n anazht sewn meth bo jeia thc apokop c (cut) (sÔmbolo {!}).
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.6
'Estw er¸thsh thc morf c
?- A, B, C.
Kai to akìloujo tm ma progr�mmatoc
Prìgramma
B : −A1, · · · , Ak, !, Ak+1, · · · , An.B : −D1, · · · , Dm.B : −F1, · · · , Fk.
P. Rontogi�nnhc Logikìc Programmatismìc
Rìloc Apokop c
'Otan o mhqanismìc ektèleshc thc Prolog per�sei apìthn apokop , tìte
ta A1, · · · , Ak den prìkeitai na xanaexetastoÔn gia
epiplèon lÔseic
oi enallaktikèc prot�seic gia to B, pou up�rqoun
sto prìgramma met� thn prìtash, pou perièqei thn
apokop , den prìkeitai na exetastoÔn
K�poiec lÔseic apokìptontai apì th diadikasÐa
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.7
'Estw to prìgramma:
Prìgramma
father(tom,jim).
male(jim).
son(X,Y):-father(Y,X), male(X).
son(george, jim).
son(john, nick).
Kai h er¸thsh
?-son(S,F).
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.7
O mhqanismìc thc Prolog ja d¸sei treic lÔseic:
{ S=jim, F=tom }
{ S=george, F=jim }
{ S=john, F=nick }
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.7
An to prìgramma antikatastajeÐ me to:
Prìgramma
father(tom,jim).
male(jim).
son(X,Y):-father(Y,X), !, male(X).
son(george, jim).
son(john, nick).
P. Rontogi�nnhc Logikìc Programmatismìc
Par�deigma 7.7
O mhqanismìc ektèleshc thc Prolog dÐnei th lÔsh
{S=jim, F=tom}.
Oi �llec dÔo lÔseic apokìptontai lìgw tou sumbìlou !,pou den epitrèpei thn exètash twn enallaktik¸nprot�sewn gia to son(S,F).
P. Rontogi�nnhc Logikìc Programmatismìc
Sqìlia
H apokop qrhsimopoieÐtai sun jwc ìtan gnwrÐzoumeìti to prìblhma èqei mÐa kai monadik lÔsh kaiepijumoÔme ton periorismì �skopou yaxÐmatoc. Taprogr�mmata eÐnai ètsi pio apotelesmatik�.
H apokop den an kei sto logikì tm ma thc Prologkai gi' autì endèqetai na dhmiourg sei dusnìhtaprogr�mmata. Lanjasmènh qr sh thc perikìpteilÔseic qr simec kai epijumhtèc.
P. Rontogi�nnhc Logikìc Programmatismìc