Logikai programozás 8..

Slides:



Advertisements
Hasonló előadás
Koordináták, függvények
Advertisements

Nevezetes algoritmusok
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Diagnosztika szabályok felhasználásával, diagnosztikai következtetés Modell alapú diagnosztika diszkrét módszerekkel.
Delphi programozás alapjai
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Microsoft Access V. Készítette: Rummel Szabolcs Elérhetőség:
Táblázat kezelő programok
Programozási alapismeretek 10. előadás
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
KOVÁCS DÁVID. ALAPFOGALMAK Adatbázis: Olyan adatgyűjtemény, amely egy adott feladathoz kapcsolódó adatokat szervezett módon tárolja, és biztosítja az.
16. Tétel. Adatbázis: Olyan adatgyűjtemény, amely egy adott feladathoz kapcsolódó adatokat szervezett módon tárolja, és biztosítja az adatokhoz való hozzáférést,
Adatbázis alapú rendszerek
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Mátrix függvények Keresőfüggvények
Készítette: Pető László
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
PROLOG PROGRAMOZÁSI NYELV
Ismeretalapú rendszerek alaptechnikái I. Szabályalapú rendszerek.
Ismeretalapú rendszerek alaptechnikái
Ismeretalapú rendszerek alaptechnikái I. Szabályalapú rendszerek.
Táblázatkezelés alapjai MS Excel, OpenOffice Calc
Táblázatkezelés alapjai MS Excel, OpenOffice Calc
MI A MEMÓRIA? A memória tulajdonképpen egy logikai áramkör, ami adatok megőrzésére alkalmas. Az adat számunkra most azt jelenti, hogy van-e jel vagy nincs.
A Pascal programozási nyelv alapjai
Félévi típus feladatok
A Pascal programozási nyelv alapjai
Tömbök és programozási tételek
Készítette: Tóth Ervin
Algoritmus gyakorlati feladatok
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Programozási tételek.
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Logikai programozás 2..
Logikai programozás 9.. Programok: EGY KIS ISMERET-TÁGÍTÁS – struktura.pl – operatorok.pl, precedencia.pl – útvonaltervezés – send_more_money (smm1.pl,
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Logikai programozás 5..
Programozási tételek.
Logikai programozás BEVEZETÉS.
5. gyakorlat Fleiner Rita.
Logikai programozás 8.. KIINDULÓ PÉLDÁK
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
Logikai programozás. ISMÉTLÉS Fibonacci sorozat: a/ fibonacci(1,1). fibonacci(2,1). fibonacci(N,F) :- N > 1, N1 is N - 1, N2 is N - 2, fibonacci(N1, F1),
ProgramozásProgramozás célja hosszabb számítások elvégzése ill. kiíratása akkor érdemes programot írni, ha sok számolni való van illetve ha ugyanazt az.
Gráfok ábrázolása teljesen láncoltan
Java web programozás 7-8..
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
TÁMOP /1-2F Felkészítés szakmai vizsgára, informatika területre modulhoz II/14. évfolyam Az interaktív vizsga jellegzetes feladattípusainak.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Excel alapok Templom Téri Német Nemzetiségi Általános iskola Pilisvörösvár 2015 A leggyakoribb Excel műveletek, ill. típusfeladatok Készítette: Kárpát.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Adatbázis alapú rendszerek
Logikai programozás 7..
Logikai programozás 10..
Script nyelvek előadás
Nevezetes algoritmusok
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata október Skultéti Attila
Logikai programozás 4..
Kovács Gergely Péter Bevezetés
Meta-programozás (von) Neumann-elv Program-programozás (vírusok)
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatikai gyakorlatok 11. évfolyam
Előadás másolata:

Logikai programozás 8.

ISMÉTLÉS: ADATBÁZISKEZELÉS Adatok: a tényállítások A külső adatok a hatására bekerülnek a memóriába consult Lekérdezés: Ahogy eddig – pl.: szereti(jani, sör). szereti(Ki, Mit). mernek(Hol, bor).

ISMÉTLÉS: ADATBÁZISKEZELÉS Beszúrás: assert/1 pl.: assert(szereti(jani,bor)). Törlés: retract/1, retractall/1 pl.: retract(szereti(jani,bor)). Ha nincs törlendő: eredmény: false retract(szereti(jani,_)). retract(szereti(_,_)). retractall(szereti(jani,_)). Ha nincs törlendő: eredmény: true

ISMÉTLÉS: ADATBÁZISKEZELÉS A beszúrás, törlés hatására hibaüzenetet kaphatunk: assert/1: No permission to modify static_procedure `szereti/2' A predikátumok alapértelmezetten statikusként fordulnak. Dinamikussá tétel: :- dynamic szereti/2. Figyelem! Ez deklaráció, nem predikátum, vagyis nincs zárójel!

ISMÉTLÉS: ADATBÁZISKEZELÉS Összes adat kilistázása: listing pl.: listing(szereti/2). Az adatok addig „élnek”, amíg ki nem lépünk a futtató-környezetből. Fájlba mentés mint eddig, de a listing-gel egyszerűsíthető: pl.: fajlba:- tell(‘fajlnev’), listing(szereti/2), told. Hatására a dynamic deklaráció is a fájlba kerül – saját adatfájlnál is célszerű ide írni.

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA assert/1: nem csak adatokat, hanem szabályokat is be tudunk szúrni. Szintaktikája: assert(a:-b.) Pl.: szereti(jani, bor). szereti(eva, tej). arulnak(sarok, bor). arulnak(tejbolt, tej). egy :- assert(ember(X) :- szereti(X,_)). ketto :-assert(ital(X):-szereti(_,X)). harom :- assert(vasarol(X,Hely) :- (szereti(X,Y), arulnak(Hely,Y))).

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA „Szakértői rendszer” : A felhasználónak feltett választól függően a kocsmázáshoz vagy kell pénz, vagy sem, vagyis a választól függően a két szabály valamelyike használható: jar(Diak, Kocsma) :- szereti(Diak,Ital), mernek(Kocsma,Ital). jar(Diak, Kocsma) :- szereti(Diak,Ital), mernek(Kocsma,Ital), gazdag(Diak).

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA Vagyis a választól függően: retractall(jar(Diak,Kocsma):-(szereti(Diak,Ital), mernek(Kocsma,Ital), gazdag(Diak))), assert(jar(Diak,Kocsma):-(szereti(Diak,Ital), mernek(Kocsma,Ital))), vagy fordítva az assert és a retractall

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA Fibonacci sorozat fib(0, 1). fib(1, 1). fib(N, F) :- N >= 2, N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2. ?- fib(5,F). Nyomkövetés: 86 lépés. pontosvessző után újabb 40. újrafuttatás 86 lépés.

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA Fibonacci sorozat - módosítás :- dynamic fib/2. fib(0, 1). fib(1, 1). fib(N, F) :- N >= 2, N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2, asserta(fib(N,F)). ?- fib(5,F). Nyomkövetés: 58 lépés. pontosvessző után újabb 21. újrafuttatás 2 lépés.

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA Fibonacci sorozat – újabb módosítás :- dynamic fib/2. fib(0, 1). fib(1, 1). fib(N, F) :- N >= 2, N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2, asserta(fib(N,F) :- !). ?- fib(5,F). Nyomkövetés: 58 lépés. pontosvessző után újabb 16. újrafuttatás 2 lépés.

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA Fibonacci sorozat – még hatékonyabb változat fib(0,1). fib(N,F) :- N > 1, fib(N,F,_). fib(1,1,1). fib(N,F,FElozo) :- N > 1, N1 is N-1, fib(N1, FElozo, FEE), F is FElozo + FEE. ?- fib(5,F). Nyomkövetés: 38 lépés. pontosvessző után újabb 9. újrafuttatás 38 lépés.

ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA Fibonacci sorozat – módosított változat :-dynamic fib/3. fib(0,1). fib(N,F) :- N > 1, fib(N,F,_). fib(1,1,1). fib(N,F,FElozo) :- N > 1, N1 is N-1, fib(N1, FElozo, FEE), F is FElozo + FEE, asserta(fib(N,F,FElozo):-!). ?- fib(5,F). Nyomkövetés: 46 lépés. pontosvessző után újabb 9. újrafuttatás 6 lépés és nincs alternatíva.

ADATBÁZISKEZELÉS – PÉLDÁK 1. Egy szokatlan alkalmazás: „procedurális” összegzés start1:- retractall(ossz(_)), assert(ossz(0)), szamol. szamol :- write('van még szám? i/n '), read(V), V = i, write(' a szám értéke: '), read(Sz), Uj is Eddig + Sz, szamol. ossz(Eddig), retract(ossz(Eddig)), assert(ossz(Uj)), szamol :- ossz(S), writef('A számok összege: %w\n', [S]).

ADATBÁZISKEZELÉS – PÉLDÁK 2. Adatbázisban lévő adatok (pl.: adat(kati,3).) összegzése: szamol(Eddig) :- adat(Nev,Db), Uj is Eddig + Db, szamol(Uj). szamol(Veg) :- writef('Az adatok összege: %w', [Veg]), retract(adat(Nev,Db)), assert(temp(Nev,Db)), visszair. visszair :- temp(Nev,Db), retract(temp(Nev,Db)), assert(adat(Nev,Db)),visszair. visszair. start :- szamol(0), …

ADATBÁZISKEZELÉS – PÉLDÁK 3. Ugyanaz másképp (ügyesebben): start :- retractall(osszeg(_)), assert(osszeg(0)), forall(adat(_,Db),( retract(osszeg(Eddig)), Uj is Eddig + Db, assert(osszeg(Uj)) ) ), osszeg(Veg), writef('Az adatok összege: %w', [Veg]).

ADATBÁZISKEZELÉS – PÉLDÁK 4. Max-keresés adatbázison (pl. adat(kati,3).) (a): start :- adat(Nev,Szam), max(Nev,Szam). max(_,Eddigimax) :- adat(Nev,Szam), Szam>Eddigimax, max(Nev,Szam). max(Nev,Max) :- writef('Legjobb %w %w értékkel', [Nev,Max]). Hol van az „else” ág? Hátrányok: 1. csak kiírja, de nem tárolja a legjobbat 2. nem enged holtversenyt 3. rossz hatásfok

ADATBÁZISKEZELÉS – PÉLDÁK 5. Max-keresés adatbázison (pl. adat(kati,3).) (b): start :- adat(_,Szam), max2(Szam,Vegmax), writef('A legjobbak %w értékkel\n', [Vegmax]), forall(adat(Nev,Vegmax), writeln(Nev)). max2(Eddigimax,Vegmax) :- adat(_,Szam), Szam>Eddigimax, max2(Szam,Vegmax). max2(Vegmax,Vegmax). Ez sem őrzi meg az adatokat, de kezeli a holtversenyt.

ADATBÁZISKEZELÉS – PÉLDÁK 6. Max-keresés adatbázison (pl. adat(kati,3).) (c): start :- adat(_,Szam), max2(Szam,Vegmax), writef('A legjobbak %w értékkel\n', [Vegmax]), findall(Nev, adat(Nev,Vegmax), Nevsor), ki(Nevsor). ki([Nev|T]) :- writeln(Nev), ki(T). ki([]). Most a Nevsor lista őrzi is a legjobbak névsorát. (Ez persze, nem biztos, hogy fontos.) Esetleg még: sort(Nevsor, Rendezett).

ADATBÁZISKEZELÉS – PÉLDÁK De persze így is lehet: findall(Szam, adat(_,Szam), Szamok) majd kikeresni a Szamok lista maximumát, és megkeresni, melyik nevekhez tartozik ez az érték.

ADATBÁZISKEZELÉS – PÉLDÁK Hogyan rendez? findall((Nev,Szam), adat(Nev,Szam), Adatok), sort(Adatok, Rendezve),… findall((Szam,Nev), adat(Nev,Szam), Adatok), sort(Adatok, Rendezve),… Megjegyzés: Attól még, hogy rendezéshez esetleg (Szam,Nev) alakban adjuk meg az adatokat, kiíratni Nev, Szam sorrendben illik!

ADATBÁZISKEZELÉS – PÉLDÁK A nevek.dat fájlban nevek vannak felsorolva. Be kell olvasni őket, és létrehozni egy diak(Nev,0) szerkezetű adatokból álló adatbázist. beolvas:- retractall(diak(_,_)), see('nevek.dat'), be, seen. be :- read(Nev), Nev \== end_of_file, be. assert(diak(Nev,0)),

ADATBÁZISKEZELÉS – PÉLDÁK Ugyanez másképp: be :- repeat, read(Nev), ( Nev == end_of_file,!; assert(diak(Nev,0)), fail ).