Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- racunaj(L,LI,DI) :-
- razd(L,LL,DL), % razdvoj listu L na LL (levi deo liste L) i DL
- izraz(LL,LI), % iz liste LL pravi izraz
- izraz(DL,DI), % od liste DL pravi izraz
- LI =:= DI. % proverava da li su ta 2 izraza ista
- izraz([X],X). % broj je izraz sam za sebe
- % izraz([X],-X). % unarni minus - ne treba nam
- izraz(L,T) :- % binarni izraz - opsti slucaj
- razd(L,LL,DL), % razdvojimo listu L na LL i DL,
- % (rekurzivno delimo i te 2 liste na jos 2)
- % i na kraju pravimo izraz od njih, sa + - * /
- izraz(LL,LI),
- izraz(DL,DI),
- binizraz(LI,DI,T).
- % binizraz(LI,DI,T) pravi sve binarne operacije izmedju ova 2 izraza
- binizraz(LI,DI,LI+DI).
- binizraz(LI,DI,LI-DI).
- binizraz(LI,DI,LI*DI).
- binizraz(LI,DI,LI/DI) :- DI =\= 0. % da ne bismo delili sa nulom
- % razd(L,L1,L2) razdvaja listu L na L1 i L2
- razd(L,L1,L2) :- spoj(L1,L2,L), L1 = [_|_], L2 = [_|_].
- spoj([], L, L).
- spoj([G|D], L, [G|L1]):-spoj(D,L,L1).
- % do(L) :- isto kao da pustimo funkciju racunaj(L,A,B) pa da nam vraca A i B,
- % ali ovde lepse ispisemo
- radi(L) :-
- racunaj(L,LI,DI),
- print(LI), print(=), print(DI), nl,
- fail. % da bi ispisao sva resenja
- radi(_). % da ne bi vratio samo fail
- % primer ?- do([2,3,5,7,11]).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement