Zadatak 1.
kti(L,K,Rez) :- kti(L,K,Rez,K).
kti([],_,[],_).
kti([G|R],1,[G|R1],K) :- kti(R,K,R1,K).
kti([G|R],PomK,L,K) :- Pk is PomK - 1, kti(R,Pk,L,K).
Zadatak 2.
okreni([],L,L).
okreni([G|R],O,L) :- okreni(R,[G|O],L).
saberi(L1,L2,S) :- okreni(L1,[],S1), okreni(L2,[],S2), sab2(S1,S2,0,Sp), okreni(Sp,[],S).
sab2([],[],1,[1]).
sab2([],[],0,[]).
sab2([],L,Prenos,S) :- dodajPrenos(Prenos,L,S).
sab2(L,[],Prenos,S) :- dodajPrenos(Prenos,L,S).
sab2([G1|R1],[G2|R2],Prenos,[G3|R3]) :- G4 is G1 + G2 + Prenos, PomPr is G4 // 10,
G3 is G4 mod 10, sab2(R1,R2,PomPr,R3).
dodajPrenos(0,L,L).
dodajPrenos(1,[G|R],[G1|R]) :- G < 9, G1 is G + 1.
dodajPrenos(1,[G|R],[0|R1]) :- dodajPrenos(1,R,R1).
dodajPrenos(1,[],[]).
Zadatak 3.
(define (resi) (nadji 10))
(define (nadji n)
(cond ((= n 100) 'nema_resenja)
((= (* n n) (+ (fakt (modulo n 10)) (fakt (quotient n 10)))) n)
(t (nadji (+ n 1)))
)
)
(define (fakt n)
(if (= n 0) 1 (* n (fakt (- n 1))))
)
Zadatak 4.
(define (skalarni l1 l2) (sp (cdr l1) (cdr l2)))
(define (sp l1 l2)
(if (null? l1) 0
(+ (sp (cdr l1) l2)
(* (cadar l1) (pronadji (caar l1) l2))
)
)
)
(define (pronadji x l)
(cond ((null? l) 0)
((= x (caar l)) (cadar l))
(t (pronadji x (cdr l)))
)
)