Zadatak 1.
(define (sk l k)
(suma l k 0 1)
)
(define (suma l k s tn)
(cond ((null? l) s)
((< k tn) s)
((atom? (car l)) (suma (cdr l) k (+ s (car l)) tn))
(t (+ (suma (car l) k 0 (+ 1 tn)) (suma (cdr l) k s tn)))
)
)
Zadatak 2.
(define (as l)
(asp l 0 0)
)
(define (asp l s n)
(if (null? l) (/ s n)
(asp (cdr l) (+ s (car l)) (+ n 1))
)
)
(define (manje a b d)
(if (< (abs (- d a)) (abs (- d b))) t nil)
)
(define (glSort l)
(sort l (as l))
)
(define (sort l d)
(if (null? l) nil
(ubaci (car l) (sort (cdr l) d) d)
)
)
(define (ubaci x l d)
(cond ((null? l) (list x))
((manje x (car l) d) (cons x l))
(t (cons (car l) (ubaci x (cdr l) d)))
)
)
Zadatak 3.
mesaj([],L,L).
mesaj(L,[],L).
mesaj([G1|R1],[G2|R2],[G1|R3]) :- G1 < G2, mesaj(R1,[G2|R2],R3).
mesaj([G1|R1],[G2|R2],[G2|R3]) :- mesaj([G1|R1],R2,R3).
Zadatak 4.
broji([],I,0).
broji([G|R],I,N) :- pripada(G,I), broji(R,I,N1), N is N1 + 1.
pripada(X,[[A,B]|_) :- A <= X, X <= B.
pripada(X,[G|R]) :- pripada(X,R).