/*
Max-keresés adatbázison. - Néhány variáció
*/


adat(kati,3).
adat(mari,4).
adat(misi,6).
adat(géza,2).
adat(dezső,6).
adat(józsi,5).
adat(jani,6).


start1 :- adat(Nev,Szam), max1(Nev,Szam).

max1(_,Eddigimax) :- adat(Nev,Szam), Szam>Eddigimax, max1(Nev,Szam).
max1(Nev,Max) :- writef('Legjobb %w %w értékkel',[Nev,Max]).


/*Hátrányok: 
1. csak kiírja, de nem tárolja a legjobbat
2. nem enged holtversenyt
*/




start2 :- 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.
*/




start3 :-  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, a konkrét feladat dönti el, hogy kell-e tárolni vagy sem.
*/




start4 :-  adat(_,Szam), max2(Szam,Vegmax), 
	writef('A legjobbak %w értékkel\n',[Vegmax]),
	findall(Nev, adat(Nev,Vegmax), Nevsor), sort(Nevsor, Rendezett), ki(Rendezett).

/*Névsorba is rakja az eredményt.

Megjegyzés: 
Időnként látok olyat, hogy valaki max-keresés helyett is a sort-ot használja.
Ez hibás, mert
a/ Nem lövünk ágyúval verébre - vagyis a rendezés mindig bonyolultabb (nagyobb gépkapacitást igénylő), mint egy sima max-keresés.
b/ A holtverseny megállapítása is nehézkesebb.
*/




/*
start5 :- findall((Nev,Szam), adat(Nev,Szam), Lista), ....

és ettől kezdve lehet a listákra vonatkozó, korábban tanult max-kereséssel dolgozni.


Itt is lehet kezelni a holtversenyt:

findall(Szam, adat(_,Szam), Szamok) 
majd kikeresni a Szamok lista maximumát, és megkeresni, melyik nevekhez tartozik ez az érték.

*/
