Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*1. Definisi predikat kojim se odredjuje broj elemenata u listi L.*/
- brElemenata([],0).
- brElemenata([_|OstatakListe],R):-brElemenata(OstatakListe,R1), R is R1+1.
- /*2. Definisi predikat kojim se odredjuje suma elemenata u listi brojeva L.*/
- suma([],0).
- suma([PrviElement|OstatakListe],S):-suma(OstatakListe,S1), S is S1+PrviElement.
- /*3. Definisi predikat kojim se odredjuje aritmeticka sredina elemenata u listi brojeva.*/
- aritmetickaSredina(Lista, Prosek):-suma(Lista, S), brElemenata(Lista, R), Prosek is S/R.
- /*4. Definiši predikat kojim se za dato N kreira lista koja sadrži
- a) redom brojeve od 1 do N
- b) redom brojeve od N do 1
- c) brojeve deljive sa 5 koji su manji od N
- */
- clan(X,[X|_]).
- clan(X,[_|L]):-clan(X,L).
- spoji([],L,L).
- spoji([X|L1],L2,[X|L]):-spoji(L1,L2,L).
- doN(1,[1]).
- doN(N,L):-N>1, N1 is N-1, doN(N1,L1), spoji(L1,[N],L).
- odN(1,[1]).
- odN(N,L):-N>1, N1 is N-1, odN(N1,L1), spoji([N],L1,L).
- deljivi_sa_5(N, L) :-deljivi_sa_5_pomocna(1, N, [], L).
- deljivi_sa_5_pomocna(A, N, L1, R) :-
- A =< N,
- (
- A mod 5 =:= 0 ->
- spoji(L1, [A], L2)
- ;
- L2 = L1
- ),
- A1 is A + 1,
- deljivi_sa_5_pomocna(A1, N, L2, R).
- deljivi_sa_5_pomocna(_, _, L1, L1).
- /*5. Definiši predikat kojim se iz date liste izdvajaju pozitivni elemeneti.*/
- pozitivni([],[]).
- pozitivni([X|L],[X|R]):-X>0,pozitivni(L,R).
- pozitivni([X|L],R):-X=<0,pozitivni(L,R).
- /*6. Definiši predikat kojim se iz date liste brojeva izdvajaju elementi koji su veći od aritmetičke sredine elemenata liste.*/
- veciOdProseka(L,R):-aritmetickaSredina(L,Prosek), veciOdProseka(L,Prosek,R).
- veciOdProseka([],_,[]).
- veciOdProseka([X|L],Prosek,[X|R]):-X>Prosek, veciOdProseka(L,Prosek,R).
- veciOdProseka([X|L],Prosek,R):-X=<Prosek, veciOdProseka(L,Prosek,R).
- /*7. Definisi predikat kojim se odredjuje maksimalini element u listi brojeva.*/
- maksimum([],_):-fail.
- maksimum([X],X).
- maksimum([X|L],M):-maksimum(L,M2), M is max(X,M2).
- /*8. Definisi predikat kojim se odredjuje suma pozitivnih elemenata u listi celih brojeva.*/
- sumaPozitivnih([],0).
- sumaPozitivnih([X|L],R):-X>0,sumaPozitivnih(L,R1), R is R1+X.
- sumaPozitivnih([X|L],R):-X=<0,sumaPozitivnih(L,R1), R is R1.
- /*9. Definisati predikat kojim se odredjuje broj pojavljivanja elementa X u datoj listi L.*/
- brojPojavljivanja(_,[],0).
- brojPojavljivanja(N,[N|L],R):-brojPojavljivanja(N,L,R1), R is R1+1.
- brojPojavljivanja(N,[_|L],R):-brojPojavljivanja(N,L,R).
- /*10. Definisi predikat kojim se odredjuje N-ti clan liste. */
- clan_liste(1, [X|_], X).
- clan_liste(N, [_|T], X) :- N > 1, N1 is N-1, clan_liste(N1, T, X).
- /*11. Formiraj listu koja sadrži elemente iz date liste L od pozicije P do pozijcije K, za dato P i K (1<=P<K<=duzini liste).*/
- odPdoK(L,P,K,R):-odPdoK(1,P,K,L,R).
- odPdoK(X,_,X,[Y|_],[Y]).
- odPdoK(X,P,K,[_|L],R):- X < P, X1 is X + 1, odPdoK(X1,P,K,L,R).
- odPdoK(X,P,K,[E|L],[E|R]):- X >= P, X < K, X1 is X + 1, odPdoK(X1,P,K,L,R).
- /*12. Podeli listu na dva dela, ako je data dužina prvog dela.
- ?- podeli([a,b,c,d,e,f,g,h,i,k],3,L1,L2).
- L1 = [a,b,c]
- L2 = [d,e,f,g,h,i,k]
- */
- podeli(L,0,[],L).
- podeli([X|L],N,[X|L1],L2):-N>0,N1 is N-1, podeli(L,N1,L1,L2).
- /*13. Napisati predikat koji se za datu listu celih brojeva L formira lista koja sadrži elemente liste L čiji se suprotan broj ne javlja u listi L.
- Npr. u listi [1, -2, -1, 3, 2, -4] to su brojevi 3 i -4.
- */
- brisi(X,[X|L],L).
- brisi(X,[Y|L],[Y|L1]):-brisi(X,L,L1).
- suprotni([],[]).
- suprotni([X|L],R):-X1 is -X, brisi(X1,L,Ost), suprotni(Ost,R).
- suprotni([X|L],[X|R]):-X1 is -X, not(brisi(X1,L,_)), suprotni(L,R). %ako stablo nema ni 1 cvoir uspeha ovo ce proci i obrnuto za gore
- /*14. Napisati PROLOG predikat sumeK(L,K,NL) koji za datu listu L i prirodan broj K formira listu NL sastavljenu
- od zbirova K uzastopnih elemenata liste L. Primer: sumeK([3,1,4,7,2,0], 3, [8,12,13,9]).*/
- sumePrvihK([X|_],1,X).
- sumePrvihK([X|L],K,R):-K>1,K1 is K-1,sumaPrvihK(L,K1,R1),R is R1+1.
- sumeK([X|L],K,[S|R]):-sumaPrvihK([X|L],K,S),sumeK(L,K,R).
- sumeK(L,K,[]):-not(sumaPrvihK(L,K,_)).
- /*15. Napisati PROLOG predikat koji za datu listu L i prirodan broj K formira listu NL redom sadrzi sumu prvih K elemenata liste, zatim sumu drugih K ...
- Od liste [3,1,4,7,2,0] za K=3 dobijamo [8,9]
- a od liste [3,1,4,7,2,5,1] za K=2 dobijamo [4,11,7]*/
- sumePoReduK(L,K,R):-sumePoReduK(L,K,R,K,0). %0 je medju rezultat koji upisujemo u rezultat
- sumePoReduK([X|L],K,R,N,Ms):-N>0, Ms1 is Ms+X, N1 is N-1, sumePoReduK(L,K,R,N1,Ms1).
- sumePoReduK(L,K,[Ms|R],0,Ms):-sumePoReduK(L,K,R,K,0).
- sumePoReduK([],_,[],N,_):-N>0.
- /*16. Dupliraj svaki element liste dati broj puta.
- ?- dupli([a,b,c],3,X).
- X = [a,a,a,b,b,b,c,c,c]
- */
- dupli(L,K,R):-dupli(L,K,R,K).
- dupli([],_,[],_).
- dupli([_|L],K,R,0):-dupli(L,K,R,K). %kada brojac dodje do 0 onda predjemo na sledeci element
- dupli([X|L],K,[X|R],N):-N>0,N1 is N-1, dupli([X|L],K,R,N1).
- /*17. Dodaj element X na poziciji K u listi L.
- Ako je X=5 K=3 Lista [a,b,c,d,e] dobijamo listu [a,b,5,c,d,e]
- */
- dodajNaK(X,1,L,[X|L]).
- dodajNaK(X,K,[Y|L],[Y|L1]):-K>1, K1 is K-1,dodajNaK(X,K1,L,L1).
- /*18. Brisi element na poziciji K iz liste L.
- Ako je K=3 Lista [a,b,c,d,e] dobijamo listu [a,b,d,e]
- */
- brisiK(1,[_|L],L).
- brisiK(K,[X|L],[X|L1]):-K>1,K1 is K-1, brisiK(K1,L,L1).
- /*19. Napisati predikate koji realizuju relacije sa skupovima: podskup, jednakost i disjunktni. Skup se zadaje kao lista. */
- duzina([],0).
- duzina([_|L],R):-duzina(L,R1), R is R1+1.
- clan(X,[X|_]).
- clan(X,[_|L]):-clan(X,L).
- podskup([], _).
- podskup([X|L], L1) :- clan(X, L1), podskup(L, L1).
- jednakost(L1,L2):-podskup(L1,L2), podskup(L2,L1), duzina(L1,D1), duzina(L2,D2), D1=:=D2.
- disjunktni([],_).
- disjunktni([X|L1],L2):-not(clan(X,L2)),disjunktni(L1,L2).
- % Unija dva skupa
- unija([],L,L).
- unija([X|L],L1,[X|R]):-not(clan(X,L1)), unija(L,L1,R). %ako element prve liste nije u drugoj, upisujemo ga u rezultat
- unija([X|L],L1,R):-clan(X,L1), unija(L,L1,R).
- % Presek dva skupa:
- presek([],_,[]).
- presek([X|L],L1,[X|R]):-clan(X,L1), presek(L,L1,R). %ako element prve liste jeste u drugoj, upisujemo ga u rezultat
- presek([X|L],L1,R):-not(clan(X,L1)), presek(L,L1,R).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement