Upload
riddick72
View
5
Download
0
Embed Size (px)
DESCRIPTION
programozási nyelvek a közoktatásban
Citation preview
Programozsi nyelvek a kzoktatsban
1. elads
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 2
AlapelveProgramozs a matematikai logika segtsgvel
Egy logikai program logikai lltsok halmaza
Egy logikai program futsa egy kvetkeztetsi folyamat, azaz
a logikai formula kirtkelse
Azt kell megmondani, hogy mit akarunk megoldani (a
hogyannal nem kell trdni)
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 3
Trtnete 1972 Marseille (PROgramming in LOGic)
1975 NIM IGSZI
1978 PROLOG fordt
1981 A japn 5. genercis projekt a logikai programozst
vlasztja
1982 MPROLOG, TPROLOG
1985 TC PROLOG
198x Turbo PROLOG
1984 mikroPROLOG
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 4
Trtnete
1986 Prolog szabvnyosts kezdete
198789 j logikai programozsi nyelvek (CLP, Gdel stb.)
1989 CS PROLOG
1990 SICStus Prolog
A legfontosabb Prolog megvalstsok: SWI Prolog: http://www.swi-prolog.org/
SICStus Prolog: http://www.sics.se/sicstus
GNU Prolog: http://pauillac.inria.fr/~diaz/gnu- prolog/
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 5
A Prolog program elemei
Tnyek = azonosan igaz formulkPlda:szlje(andrs,anna).
szlje(andrs,andrea).
szlje(anna,antal).
Egy hagyomnyos rtelemben vett eljrs azon tnyek
sszessge, amelyek neve s paramterszma azonos.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 6
A Prolog program elemei
Szablyok (kvetkeztetsi szablyok)Plda:nagyszlje(X,Y) ha szlje(X,Z) s
szlje(Z,Y).
szlje(X,Y) ha anyja(X,Y) vagy apja(X,Y).
A szablyokban az s, illetve a vagy mveletek nem
szimmetrikusak!
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 7
Megfelel = a szabad paramterek behelyettestendk, a
ktttek egyezzenek meg mintailleszts!
A Prolog program elemei
Krdsek a program utastsai (tnyek, szablyok)
kztt keressnk a krdsnek megfelel(ke)t!Plda:szlje(andrs,anna)? igaz
szlje(anna,melinda)? hamis
szlje(andrs,X)? igaz, ha X=anna (X=andrea)
szlje(X,antal)? igaz, ha X=anna
szlje(X,Y)? igaz ha X=andrs s Y=anna
(+ tovbbi megoldsok)
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 8
A krdsek megvlaszolshoz a tnyek s szablyok
kztt keresnk a lers sorrendjben a krdssel ssze-
illeszthett!
sszeilleszthet (egyesthet), ha
a nevk s paramterszmuk azonos,
az rtkkel rendelkez paramtereik azonosak,
a szabad (mg ki nem tlttt) vltoz paramtereiket pedig
behelyettestjk, hogy egyformk legyenek.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 9
Ha egy tny (vagy szably) nem feleltethet meg a
krdsnek, akkor a sorrendben kvetkezvel folytatjuk.
Ha megfeleltethet, akkor megkapjuk, hogy milyen
vltoz-paramter belltssal felelnek meg egymsnak.
Ezutn megtrtnhet az sszes megolds megkeresse
is.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 10
Plda:nagyszlje(andrs,antal)?
szlje(andrs,Z) s szlje(Z,antal)?1. szlje(andrs,Z)? igaz, ha Z=anna
2. szlje(anna,antal)? igaz
nagyszlje(andrs,antal)? igaz
Krds: mi trtnne, ha a tnyeket ms sorrendben trolnnk?szlje(andrs,andrea).
szlje(andrs,anna).
szlje(anna,antal).
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 11
Megoldsi stratgia: visszalpses keress
Plda:nagyszlje(andrs,antal)?
szlje(andrs,Z) s szlje(Z,antal)?1. szlje(andrs,Z)? igaz, ha Z=andrea
2. szlje(andrea,antal)? hamis
1. jra: szlje(andrs,Z)? igaz, ha Z=anna
2. szlje(anna,antal)? igaz
nagyszlje(anna,antal)? igaz
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 12
rsmd:
Kulcsszavas rsjeles
ha if :-
s and ,
vagy or ;
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Els Prolog program
132011.09.05.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 14
Alternatvk mskpp:szlje(X,Y) ha anyja(X,Y) vagy apja(X,Y).
szlje(X,Y) ha anyja(X,Y).
szlje(X,Y) ha apja(X,Y).
rtelmezs: akkor megy a vagy jobboldalra, ha a baloldalra nem kapott
megoldst;
akkor megy a msodik szablyra, ha az elsre nem kapott
megoldst;
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 15
Ciklus helyett rekurzv formula:se(X,Y) ha szlje(X,Y) vagy
szlje(X,Z) s se(Z,Y).
Ha egy paramter rtkre nincs szksgnk: szl(X) ha szlje(X,_).
Ha valamibl csak egy megolds kell:egyszl(X) ha szl(X) s !.
A vgs(!) rtelmezse: elre haladva azonosan igaz;
visszafel haladva hamissal fejezi be a szablyt.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 16
Ciklus helyett rekurzv formula:se(X,Y) ha szlje(X,Y) vagy
szlje(X,Z) s se(Z,Y).
Ha egy paramter rtkre nincs szksgnk: szl(X) ha szlje(X,_).
Ha valamibl csak egy megolds kell:egyszl(X) ha szl(X) s !.
A vgs(!) rtelmezse: elre haladva azonosan igaz;
visszafel haladva hamissal fejezi be a szablyt.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog elemek alkalmazsa
172011.09.05.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog
2011.09.05. 18
A ! egyb hasznlata: hinyz felttelek ptlsa:absz(X,Y) ha X>=0 s X=Y vagy Y=-X.
Krdsek:absz(5,5)? igaz
absz(-5,5)? igaz
absz(5,-5)? igaz?????
Problma: ha a msodik felttelrsz hamis, akkor is a
vagy tloldalra megy.
Helyes megolds lehet:absz(X,Y) ha X>=0 s ! s X=Y vagy Y=-X.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
A vgs msik alkalmazsa
192011.09.05.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog feladattpusok
2011.09.05. 20
Ha valamibl csak egy megolds kell:egy_szl(X) ha szl(X) s !.
Ha valamibl az sszes megolds kell:sszes_szl ha szl(A) s write(A)
s fail vagy true.
Magyarzat:
fail azonosan hamis logikai formula
true azonosan igaz logikai formula
write kirs
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog feladattpusok
2011.09.05. 21
Adott tulajdonsggal nem rendelkez:Nem_szl(A) ha valami(A) s nem(szl(A)).
valami(A) ha szlje(A,_) vagy szlje(_,A).
Rkrdezs valami egyszeressgre:egyszeres_szl(A) ha szl(A) s
nem(tbbszrs_szl(A)).
tbbszrs_szl(A) ha szlje(A,X) s
szlje(A,Y) s XY.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Egyszeres, tbbszrs
222011.09.05.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog feladattpusok
2011.09.05. 23
Rkrdezs valami sszessgre:mindegy_szl(A) ha szl(A) s
nem(vanms_szl(A)).
vanms_szl(A) ha szl(B) s AB.
Rkrdezs a legnagyobbra:max_kor(Y,K) ha kora(Y,K) s
nem(vannagyobb_kor(K)).
vannagyobb_kor(K) ha kora(_,L) s L>K.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Mind ugyanaz, legnagyobb
242011.09.05.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Tanuls
2011.09.05. 25
A Prolog program kpes futs kzben vltoztatni nmagn, j
tnyeket, szablyokat vehetnk fel, korbbiakat trlhetnk.
Az ehhez kapcsold mveletek:
assert(tny vagy szably).
asserta(tny vagy szably).
assertz(tny vagy szably).
retract(tny vagy szably feje).
retractall(tny vagy szably feje).
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Plda tanulsra I.
2011.09.05. 26
Egyes Prolog verzikban: A is C+1
Adott tnyek megszmolsa (gyerekek szma):
szlje(anna,antal).szlje(anna,andrea).
szlje(andrea,andrs).
megszamol(X,A)ha szuloje(X,_)s szabadsz(X)s
darab(X,A).
szabadsz(B) ha voltsz(B) s ! s fail
vagy asserta(voltsz(B)).
darab(X,A) ha szlje(X,B) s szabad(B) s
darab(X,C) s A=C+1 s ! vagy A=0.
szabad(B) ha volt(B) s ! s fail
vagy asserta(volt(B)).
Ez csak akkor mkdik, ha a gyerekek neve klnbz!
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Adott tnyek megszmolsa
272011.09.05.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Plda tanulsra II.
2011.09.05. 28
Adott tnyek sszegzse (termkek rt troljuk):
ra(kv,1000).
ra(tea,800).
ra(kaka,1000).
sszeg(A) ha ra(X,B) s szabad(X) s
sszeg(C) s A=C+B vagy A=0.
szabad(X) ha volt(X) s ! s fail
vagy asserta(volt(X)).
Ez csak akkor mkdik, ha a termkek neve klnbz!
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Plda tanulsra III.
2011.09.05. 29
Adott tnyek szmnak maximuma (legtbb gyerek szlje):
szlje(anna,antal).
szlje(anna,andrea).
szlje(andrea,andrs).
darab(X,A) ha szlje(X,B) s szabad(B) s
darab(X,C) s A=C+1 vagy A=0.
szabad(B) ha volt(B) s ! s fail
vagy asserta(volt(B)).
legtbb(X) ha darab(X,A) s nem(vantbb(A)).
vantbb(A) ha darab(_,B) s B>A.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog sorozat tpus
2011.09.05. 30
Sorozat megads:
NIL vagy elem.sorozat
[] vagy [elem|sorozat] vagy [elem,elem,...]
Plda: 1.2.3.NIL
[1|[2|[3|[]]]] vagy [1,2,3]
Eleme mvelet megvalstsa:
eleme(E,[E,_]).
eleme(E,[_,S]) ha eleme(E,S).
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Prolog sorozat tpus
2011.09.05. 31
Hozzfz mvelet megvalstsa:
hozzfz([],S,S).
hozzfz([E|S1],S,[E,S2]) ha hozzfz(S1,S,S2).
Ltrehoz mvelet megvalstsa:
ltrehoz(S,T) ha valami(E) s nem(eleme(E,T))
s ltrehoz(S,[E|T]) vagy S=T.
Elemszm mvelet megvalstsa:
elemszm(0,[]).
elemszm(X,[_|S]) ha elemszm(Y,S) vagy X=Y+1.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Programozsi ttelek Prologban
2011.09.05. 32
szegzs:sszeg(0,[]).
sszeg(X,[E|S]) ha sszeg(Y,S) s X=E+Y.
Eldnts:eldnt([E|_]) ha t(E).
eldnt([_|S]) ha eldnt(S).
Megjegyzs: ha a sorozat nem bonthat rszekre (azaz res),
akkor egyik szably sem alkalmazhat, teht a vlasz hamis.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
sszegzs s eldnts listval
332011.09.05.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Programozsi ttelek Prologban
2011.09.05. 34
Kivlaszts:kivlaszt(E,[E|_]) ha t(E).
kivlaszt(E,[_|S]) ha kivlaszt(E,S).
kivlaszt(1,[E|_]) ha t(E).
kivlaszt(X,[_|S]) ha kivlaszt(Y,S) s X=Y+1.
kivlaszt(1,E,[E|_]) ha t(E).
kivlaszt(X,E,[_|S]) ha kivlaszt(Y,E,S) s
X=Y+1.
Megjegyzs: Ez egyben a keress ttel is.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Programozsi ttelek Prologban
2011.09.05. 35
Megszmols:megszmol(0,[]).
megszmol(A,[E|S]) ha t(E) s megszmol(B,S) s
A=B+1 s !.
megszmol(A,[_|S]) ha megszmol(A,S).
Maximumkivlaszts:maximum(E,[E]).
maximum(E,[F|S]) ha maximum(G,S) s
nagyobb(E,F,G).
nagyobb(E,F,G) ha E>=G s E>=F.
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Programozsi ttelek Prologban
2011.09.05. 36
Kivlogats:kivlogat([],[]).
kivlogat([E|T],[E|S]) ha t(E) s
kivlogat(T,S).
kivlogat(T,[_|S]) ha kivlogat(T,S).
Sztvlogats:sztvlogat([],[],[]).
sztvlogat([E|T],U,[E|S]) ha t(E) s
sztvlogat(T,U,S).
sztvlogat(T,[E|U],S) ha sztvlogat(T,U,S).
Pap Gborn- Szlvi Pter Zsak Lszl: Programozsi nyelvek a kzoktatsban.
Programozsi ttelek Prologban
2011.09.05. 37
sszefuttats:ssze([],[],[]).
ssze(S,[],S).
ssze([],S,S).
ssze([X|A],[Y|B],[X|C]) ha XY s
ssze([X|A],B,C).
Programozsi nyelvek a kzoktatsban
1. elads vge