Advertisement
Guest User

Projekat iz prologa

a guest
Apr 25th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.46 KB | None | 0 0
  1.  
  2.  
  3. racunaj(L,LI,DI) :-
  4.    razd(L,LL,DL),              % razdvoj listu L na LL (levi deo liste L) i DL
  5.    izraz(LL,LI),                 % iz liste LL pravi izraz  
  6.    izraz(DL,DI),                 % od liste DL pravi izraz
  7.    LI =:= DI.                   % proverava da li su ta 2 izraza ista
  8.  
  9.  
  10. izraz([X],X).                    % broj je izraz sam za sebe
  11. % izraz([X],-X).                   % unarni minus - ne treba nam
  12. izraz(L,T) :-                    % binarni izraz - opsti slucaj
  13.    razd(L,LL,DL),              % razdvojimo listu L na LL i DL,
  14.                                 % (rekurzivno delimo i te 2 liste na jos 2)
  15.                                 % i na kraju pravimo izraz od njih, sa + - * /
  16.    izraz(LL,LI),                
  17.    izraz(DL,DI),                
  18.    binizraz(LI,DI,T).            
  19.  
  20. % binizraz(LI,DI,T) pravi sve binarne operacije izmedju ova 2 izraza
  21.  
  22. binizraz(LI,DI,LI+DI).
  23. binizraz(LI,DI,LI-DI).
  24. binizraz(LI,DI,LI*DI).
  25. binizraz(LI,DI,LI/DI) :- DI =\= 0.   % da ne bismo delili sa nulom
  26.  
  27. % razd(L,L1,L2) razdvaja listu L na L1 i L2
  28.  
  29. razd(L,L1,L2) :- spoj(L1,L2,L), L1 = [_|_], L2 = [_|_].
  30. spoj([], L, L).
  31. spoj([G|D], L, [G|L1]):-spoj(D,L,L1).
  32.  
  33. % do(L) :- isto kao da pustimo funkciju racunaj(L,A,B) pa da nam vraca A i B,
  34. % ali ovde lepse ispisemo
  35.  
  36. radi(L) :-
  37.    racunaj(L,LI,DI),
  38.       print(LI), print(=), print(DI), nl,
  39.    fail. % da bi ispisao sva resenja
  40. radi(_). % da ne bi vratio samo fail
  41.  
  42.  
  43. % primer  ?- do([2,3,5,7,11]).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement