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).