Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó...
Transcript of Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó...
![Page 1: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/1.jpg)
Programozás nyelvek 3
1. előadás
![Page 2: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/2.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
AlapelveProgramozás a matematikai logika segítségével
Egy logikai program logikai állítások halmaza
Egy logikai program futása egy következtetési folyamat, azaz
a logikai formula kiértékelése
Azt kell megmondani, hogy mit akarunk megoldani (a
hogyannal nem kell törődni)
2/22
![Page 3: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/3.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Története 1972 – Marseille (PROgramming in LOGic)
1975 – NIM IGÜSZI
1978 – PROLOG fordító
1981 – A japán 5. generációs projekt a logikai programozást
választja
1982 – MPROLOG, TPROLOG
1985 – TC PROLOG
198x – Turbo PROLOG
1984 – mikroPROLOG
3/22
![Page 4: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/4.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Története
1986 – Prolog szabványosítás kezdete
1987–89 – Új logikai programozási nyelvek (CLP, Gödel stb.)
1989 – CS PROLOG
1990 – SICStus Prolog
A legfontosabb Prolog megvalósítások: SWI Prolog: http://www.swi-prolog.org/
SICStus Prolog: http://www.sics.se/sicstus
GNU Prolog: http://pauillac.inria.fr/~diaz/gnu- prolog/
4/22
![Page 5: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/5.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
A Prolog program elemei
Tények = azonosan igaz formulákPélda:szülője(andrás,anna).
szülője(andrás,andrea).
szülője(anna,antal).
Egy hagyományos értelemben vett eljárás (konstans
tömb) azon tények összessége, amelyek neve és
paraméterszáma azonos.
5/22
![Page 6: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/6.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
A Prolog program elemei
Szabályok (következtetési szabályok)Példa:nagyszülője(X,Y) ha szülője(X,Z) és
szülője(Z,Y).
szülője(X,Y) ha anyja(X,Y) vagy apja(X,Y).
A szabályokban az és, illetve a vagy műveletek nem
szimmetrikusak!
6/22
![Page 7: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/7.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Megfelelő = a szabad paraméterek behelyettesítendők, a
kötöttek egyezzenek meg – mintaillesztés!
A Prolog program elemei
Kérdések – a program utasításai (tények, szabályok)
között keressünk a kérdésnek megfelelő(ke)t!Példa:szülője(andrás,anna)? → igaz
szülője(anna,melinda)? → hamis
szülője(andrás,X)? → igaz, ha X=anna (X=andrea)
szülője(X,antal)? → igaz, ha X=anna
szülője(X,Y)? → igaz ha X=andrás és Y=anna
(+ további megoldások)
7/22
![Page 8: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/8.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
A kérdések megválaszolásához a tények és szabályok
között keresünk a leírás sorrendjében a kérdéssel össze-
illeszthetőt!
Összeilleszthető (egyesíthető), ha
a nevük és paraméterszámuk azonos,
az értékkel rendelkező paramétereik azonosak,
a szabad (még ki nem töltött) változó paramétereiket pedig
behelyettesítjük, hogy egyformák legyenek.
8/22
![Page 9: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/9.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Ha egy tény (vagy szabály) nem feleltethető meg a
kérdésnek, akkor a sorrendben következővel folytatjuk.
Ha megfeleltethető, akkor megkapjuk, hogy milyen
változó-paraméter beállítással felelnek meg egymásnak.
Ezután megtörténhet az összes megoldás megkeresése
is.
9/22
![Page 10: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/10.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Példa:nagyszülője(andrás,antal)?
szülője(andrás,Z) és szülője(Z,antal)?
1. szülője(andrás,Z)? → igaz, ha Z=anna
2. szülője(anna,antal)? → igaz
nagyszülője(andrás,antal)? → igaz
Kérdés: mi történne, ha a tényeket más sorrendben tárolnánk?szülője(andrás,andrea).
szülője(andrás,anna).
szülője(anna,antal).
10/22
![Page 11: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/11.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Megoldási stratégia: visszalépéses keresés
Példa:nagyszülője(andrás,antal)?
szülője(andrás,Z) és szülője(Z,antal)?
1. szülője(andrás,Z)? → igaz, ha Z=andrea
2. szülője(andrea,antal)? → hamis
1. újra: szülője(andrás,Z)? → igaz, ha Z=anna
2. szülője(anna,antal)? → igaz
nagyszülője(anna,antal)? → igaz
11/22
![Page 12: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/12.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Írásmód:
Kulcsszavas Írásjeles
ha if :-
és and ,
vagy or ;
12/22
![Page 13: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/13.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Alternatívák másképp:szülője(X,Y) ha anyja(X,Y) vagy apja(X,Y).
szülője(X,Y) ha anyja(X,Y).
szülője(X,Y) ha apja(X,Y).
Értelmezés: akkor megy a vagy jobboldalára, ha a baloldalra nem kapott
megoldást;
akkor megy a második szabályra, ha az elsőre nem kapott
megoldást;
13/22
![Page 14: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/14.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Ciklus helyett rekurzív formula:őse(X,Y) ha szülője(X,Y) vagy
szülője(X,Z) és őse(Z,Y).
Ha egy paraméter értékére nincs szükségünk: szülő(X) ha szülője(X,_).
Ha valamiből csak egy megoldás kell:egyszülő(X) ha szülő(X) és !.
A vágás(!) értelmezése: előre haladva azonosan igaz;
visszafelé haladva hamissal fejezi be a szabályt.
14/22
![Page 15: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/15.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
Ciklus helyett rekurzív formula:őse(X,Y) ha szülője(X,Y) vagy
szülője(X,Z) és őse(Z,Y).
Ha egy paraméter értékére nincs szükségünk: szülő(X) ha szülője(X,_).
Ha valamiből csak egy megoldás kell:egyszülő(X) ha szülő(X) és !.
A vágás(!) értelmezése: előre haladva azonosan igaz;
visszafelé haladva hamissal fejezi be a szabályt.
15/22
![Page 16: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/16.jpg)
Zsakó László: Programozási nyelvek 3
Prolog
2020. 09. 09. 10:43
A ! egyéb használata: hiányzó feltételek pótlása:absz(X,Y) ha X>=0 és X=Y vagy Y=-X.
Kérdések:absz(5,5)? → igaz
absz(-5,5)? → igaz
absz(5,-5)? → igaz?????
Probléma: ha a második feltételrész hamis, akkor is a
vagy túloldalára megy.
Helyes megoldás lehet:absz(X,Y) ha X>=0 és ! és X=Y vagy Y=-X.
16/22
![Page 17: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/17.jpg)
Zsakó László: Programozási nyelvek 3
Prolog feladattípusok
2020. 09. 09. 10:43
Ha valamiből csak egy megoldás kell:egy_szülő(X) ha szülő(X) és !.
Ha valamiből az összes megoldás kell:összes_szülő ha szülő(A) és write(A, ' ')
és fail vagy succeed.
Magyarázat:
fail – azonosan hamis logikai formula
succeed (néha: true) – azonosan igaz logikai formula
write – kiírás
17/22
![Page 18: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/18.jpg)
Zsakó László: Programozási nyelvek 3
Prolog feladattípusok
2020. 09. 09. 10:43
Adattípusok:
számkonstansok – 1, -3, 2.7, 3.1e5
szövegkonstansok –'István', 'Szent István', istvan
műveleti jelek – +, -, *, /, <, =, >
struktúranevek – neve(istvan)
18/22
![Page 19: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/19.jpg)
Zsakó László: Programozási nyelvek 3
Prolog feladattípusok
2020. 09. 09. 10:43
Adott tulajdonsággal nem rendelkező:nem_szülő(A) ha valami(A) és nem(szülő(A)).
valami(A) ha szülője(A,_) vagy szülője(_,A).
Rákérdezés valami egyszerességére:egyszeres_szülő(A) ha szülő(A) és
nem(többszörös_szülő(A)).
többszörös_szülő(A) ha szülője(A,X) és
szülője(A,Y) és X<>Y.
19/22
![Page 20: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/20.jpg)
Zsakó László: Programozási nyelvek 3
Prolog feladattípusok
2020. 09. 09. 10:43
Legalább kétszeres:kétszeres_szülő(A) ha szülője(A,X) és
szülője(A,Y) és X<>Y.
Pontosan kétszeres:pont2_szülő(A) ha van_két_gyerek(A,X,Y) és
nem(többszülő(A,X,Y)).
többszülő(A,X,Y) ha szülője(A,Z) és Z<>X és Z<>Y.
van_két_gyerek(A,X,Y) ha szülője(A,X) és
szülője(A,Y) és X<>Y.
20/22
![Page 21: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/21.jpg)
Zsakó László: Programozási nyelvek 3
Prolog feladattípusok
2020. 09. 09. 10:43
Rákérdezés valami összességére:összes_szülő(A) ha szülő(A) és
nem(vanmás_szülő(A)).
vanmás_szülő(A) ha szülő(B) és A<>B.
Rákérdezés a legnagyobbra:max_korú(Y,K) ha kora(Y,K) és
nem(vannagyobb_korú(K)).
vannagyobb_korú(K) ha kora(_,L) és L>K.
kora(…,…).
21/22
![Page 22: Programozás nyelvek 3 1. előadásprognyelv3.elte.hu/downloads/eloadas/Prolog1.pdf · Zsakó László: Programozási nyelvek 3 Prolog 2017. 09. 12. 7:22 Alapelve Programozás a matematikai](https://reader036.fdocument.pub/reader036/viewer/2022070921/5fb9b31a09a63716fe1c7839/html5/thumbnails/22.jpg)
Programozás nyelvek 3
1. előadás vége