Deklaratív programozás - Prolog vizsgafeladat: beszúrásos rendezés

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 21., 20:55-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|DeklapoVizsgaBeszurasos}} ==Segédpredikátum== =beszur(Mibe, Mit, Eredm)= -> Mibe rendezett listába beszúrja a Mit elemet és ezt viss…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


Segédpredikátum

=beszur(Mibe, Mit, Eredm)= -> Mibe rendezett listába beszúrja a Mit elemet és

 ezt visszaadja Eredm-be. pl.
	beszur([], 1, R).
	R = [1] ;
	beszur([2, 3], 7, R).
	R = [2, 3, 7]

Megvalósításra példa (saját logika):

beszur([], B, [B]).
beszur([A1|A],B,C) :-
	(A1>B
	 -> C=[B,A1|A]
	 ;  beszur(A,B,C2),
		 C=[A1|C2]).

Főpredikátum

=rendez(A, B)= - rendezi az A integer-listát B-be. pl.

	rendez([1, 22, 2, 7, 3, 1, 4, 5], B).
	B = [1, 1, 2, 3, 4, 5, 7, 22] ;

Megvalósításra példa:

rendez(A, B) :-
	rendeziter(A, [], B).

rendeziter([A1|A], A2, B) :-
	beszur(A2, A1, A3),
	rendeziter(A, A3, B).

rendeziter([], B, B).

Itt a =rendeziter= segédpredikátum a második paraméterébe gyűjti a már rendezett résztömböt a rekurzív hívások során.