prognyelvkozoktl_1ea

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