Prolog


  % doktor obavlja                   
  doktor_obavlja('Dr1', 'pregled').
  doktor_obavlja('Dr2', 'pregled').
  doktor_obavlja('Dr2', 'masaža').
  doktor_obavlja('Dr3', 'masaža').
  doktor_obavlja('Dr3', 'uvod').
  doktor_obavlja('Stažist', 'uvod').
  
  % raspoloživost doktora            
  doktor_raspoloziv('Dr1', '8-10').  
  doktor_raspoloziv('Dr1', '10-12'). 
  doktor_raspoloziv('Dr1', '12-14'). 
  doktor_raspoloziv('Dr1', '14-16'). 
  % sredina dana
  doktor_raspoloziv('Dr2', '10-12'). 
  doktor_raspoloziv('Dr2', '12-14'). 
  % popodnevna smjena
  doktor_raspoloziv('Dr3', '12-14').
  doktor_raspoloziv('Dr3', '14-16').
  
  doktor_raspoloziv('Stažist', '8-10').
  
  % zauzeca doktora                  
  doktor_zauzet('Dr1', '8-10').
  
  %doktor_zauzet('Dr2', '12-14').
  
  % zauzeca prostora
  prostor_zauzet('soba1', '8-10').
  prostor_zauzet('soba2', '16-18').
  
  % resursi
  resurs_zauzet('EKG', '8-10', 'zauzet').
  
  % koji resursi su u kojim prostorima
  prostor_resurs('soba1', ['EKG','stol','ploča']).
  prostor_resurs('soba2', ['stol','ploča']).
  prostor_resurs('soba3', ['stol','solarij']).
  prostor_resurs('soba4', ['ploča']).
  
  % aktivnosti trebaju
  aktivnost_resurs('pregled', ['stol','EKG']). 
  aktivnost_resurs('masaža', ['stol', 'solarij']).
  aktivnost_resurs('uvod',['ploča']).
  
  % preferencije pacjenta
  preferira_vrijeme('Ivan', '8-10').
  preferira_vrijeme('Ivan', '10-12').
  preferira_vrijeme('Ivan', '12-14').
  %preferira_vrijeme('Ivan', '14-16').
  
  preferira_vrijeme('Pero', '12-14').
  preferira_vrijeme('Spavalo', '14-16').
  
  element(X,[G|_]) :-
         X == G.
  element(X,[_|R]) :-
         element(X,R).
  
  subset([],_).
  subset([G|R],X) :-
        element(G,X),subset(R,X).
  
  % koju aktivnost možemo dobiti kod koga i kada?
  aktivnost_kod_kada(AKTIVNOST, DOKTOR, KADA) :-
        doktor_obavlja(DOKTOR, AKTIVNOST),
        doktor_raspoloziv(DOKTOR, KADA),
        not( doktor_zauzet(DOKTOR, KADA) ).
  
  % koje aktivnost se mogu održati u kojem prostoru?
  aktivnost_prostor_oprema(AKTIVNOST, PROSTOR, OPREMA) :-
        aktivnost_resurs(AKTIVNOST, OPREMA),
        prostor_resurs(PROSTOR, SVAOPREMA),
        subset(OPREMA,SVAOPREMA).
  
  
  schedule(PACIJENT, DOKTOR, PROSTOR, AKTIVNOST, KADA, OPREMA) :-
        doktor_obavlja(DOKTOR, AKTIVNOST),
        doktor_raspoloziv(DOKTOR, KADA),
        not( doktor_zauzet(DOKTOR, KADA) ),
        aktivnost_resurs(AKTIVNOST, OPREMA),
        prostor_resurs(PROSTOR, SVAOPREMA),
        not( prostor_zauzet(PROSTOR, KADA) ),
        subset(OPREMA,SVAOPREMA),
        preferira_vrijeme(PACIJENT, KADA).