Je blo na listo poslan par dni nazaj... Evo še 1x :)
LP, Domen
%len(L,N) - stevilo elementov seznama
len([],0).
len([H|T],N1):-
len(T,N),
N1 is N+1.
%sulm (L,N) - vsota elementov seznama
sum([],0).
sum([H|T],N1):-
sum(T,N),
N1 is N+H.
%min(L,Min) - vrne minimalni element seznama
min([H],H).
min([H|T],Min1):-
min(T,Min),
H < Min,
Min1 is H.
min([H|T],Min):-
min(T,Min),
H >= Min.
%max(L,Max) - vrne maksimalni element seznama
max([H],H).
max([H|T],Max1):-
max(T,Max),
H > Max,
Max1 is H.
max([H|T],Max):-
max(T,Max),
H =< Max.
%is_sorted(L) - vrne true ali no ce je L sortiran
is_sorted([H]).
is_sorted([H1,H2|T]):-
H1 =< H2,
is_sorted([H2|T]).
%insertSort(L,SL) - najde najmanjsi element in ga doda v SL in odstrani iz L
insertSort([],[]).
insertSort(L,[Min|SL1]):-
min(L,Min),
delete(Min,L,L1),
insertSort(L1,SL1).
%quickSort(L,SL) - izbere pivot, preostale elemente sortira v dva seznama -
seznam vecjih in seznam manjsih in nato sestavi skupaj
quickSort([],[]).
quickSort([H|T],SL):-
pivot(H,T,LM,LV),
quickSort(LM,SLM),
quickSort(LV,SLV),
conc(SLM,[H|SLV],SL).
pivot(P,[],[],[]).
pivot(P,[H|T],[H|LM],LV):-
H =< P,
pivot(P,T,LM,LV).
pivot(P,[H|T],LM, [H|LV]):-
H > P,
pivot(P,T,LM,LV).
%permutation(X,L).
permutation([],[]).
permutation([X|L],P):-
permutation(L,L1),
insert(X,L1,P).
%member(X,L)
member(X,[X|T]).
member(X,[H|T]):-
member(X,T).
%conc(L1,L2,L3)
conc([],L2,L2).
conc([H|T],L2,[H|L3]):-
conc(T,L2,L3).
%insert X v seznam L, vrne naj L1
insert(X,L,[X|L]).
insert(X,[H|T],[H|L1]):-
insert(X,T,L1).
%delete X v seznamu L in vrni L1
delete(X,[X|T],T).
delete(X,[H|T],[H|L1]):-
delete(X,T,L1).
%divide(L,L1,L2) iz seznama L naredi L1 in L2, ki sta enako dolga
%divide([H|T],[H|L1],T).
divide([H|T],[H|L1],T):-
divide(T,L1,L2). %to ne dela dobro
%reverse(L,R)
reverse([],[]).
reverse([H|T],R):-
reverse(T,RT),
conc(RT,[H],R).
palindrome(L):-
reverse(L,L).
% union(A,B,Uni) - A u B = Uni
union([],B,B).
union([H|T],B,[H|Uni]):-
union(T,B,Uni),
\+member(H,Uni).
union([H|T],B,Uni):-
union(T,B,Uni),
member(H,Uni).
%presek(A,B,Pre) - A n B = Pre
presek([],B,[]).
presek([H|T],B,Uni):-
presek(T,B,Uni),
\+member(H,B).
presek([H|T],B,[H|Uni]):-
presek(T,B,Uni),
member(H,B).
%razlika(A,B,Raz) - A \ B = Raz
razlika([],B,[]).
razlika([H|T],B,Uni):-
razlika(T,B,Uni),
member(H,B).
razlika([H|T],B,[H|Uni]):-
razlika(T,B,Uni),
\+member(H,B).
%subset(A,B) - ce je A podmnozica Bja, potem vrne YES
subset([],B).
subset([H|T],B):-
member(H,B),
subset(T,B).
%powereset(A,B) - B = potencna mnozica mnozice A - povedal asistent
powerset([],[]).
powerset([H|T],[H|T1]):-
powerset(T,T1).
powerset([_|T],T1):-
powerset(T,T1).
On 8/25/07, Gregor Mostar <[EMAIL PROTECTED]> wrote:
>
> A obstaja kje kak seznam katere prologove vgrajene funkcije lahko
> uporabljamo, oz. se jih je delalo na vajah.
> Mislim take kot so findall, bagof, setof,.. Ok, te poznam.
> Sem pa gledal asistentove resitve na e-studij in je vmes kaksna, ki jo
> vidim
> prvic.
>
>
> Lp, Gregor
>
> Domen Grabec wrote:
>
> Hehe Vrčko lepa rešitev mediane :) super!
>
> Tisti k se učite za MOS pomagate si lahko s tole stranjo:
> http://www.e-studij.si/UL/FRI/UNI-RI/MOS
>
> Gor je par rešenih kolokvijev. Če imate boljše/alternativne rešitve, dajte
> jih postat gor. Tudi kakšni novi, še nerešeni kolokviji bi bili
> dobrodošli.
>
> Fino bi bilo, da damo tudi kaj teorije gor poleg prologa...
>
> LP, Domen
>
> On 8/23/07, Lovro <[EMAIL PROTECTED]> wrote:
>
> d) findall(X,(member(X,L),X>5),L1), length(L1,N)
>
> sam tud to nisem 100% :)
>
> Gregor Mostar wrote:
>
> Hvala Jernej!
>
> Kaj pa tole bi znal:
>
> (2.) kako bi prologu zastavili naslednja vprasanja? Postavite vprasanja,
>
> ne
>
> pisite odgovorov!
>
> c) Ali velja p(a) in hkrati velja p za kaksen element, ki ni a?
>
> d) Koliko elementov seznama L, ki vsebuje samo stevila, je vecjih od 5?
>
>
> 1.rok 2007:
>
> mediana(L,M):-
> conc(Left,[M|Right],L),
> length(Left,X),
> length(Right,X).
> mediana(L,M):-
> conc(Left,[M1,M2|Right],L),
> length(Left,X),
> length(Right,X),
> M is (M1 + M2)/2.
>
>
> On 8/23/07, Gregor Mostar <[EMAIL PROTECTED]> <
>
> [EMAIL PROTECTED]> wrote:
>
>
> A bi znal kdo resiti prvi nalogi iz zadnjih dveh izpitov MOS -
>
> prolog?
>
> 2.rok 2007 - 26.6.2007:
> 1.) Napisite program, ki za podani seznam, v katerem so izkljucno
>
> elementi
>
> tipa atomic, vrne element, ki se najpogosteje pojavlja.
>
>
> 1.rok 2007:
> 1.) napišite progam, ki za podani urejeni seznam števil izračuna in
>
> vrne
>
> mediano (srednji element). Pazite, mediana za sezname sode dolžine, je
> povprečje srednjih dveh elementov.
>
>
>
> Hvala!
>
> LP, Gregor
>
>
>
> --
> Jernej Vrčko
> MSN messenger: [EMAIL PROTECTED]
> SKYPE: kekecpasteta
>