Advertisement
Guest User

Untitled

a guest
Apr 9th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.62 KB | None | 0 0
  1. writeClauses(infinite):- !, numProfessors(N), writeClauses(N),!. % N = 1000 should be replaced with by right N
  2. writeClauses(MaxNumProf):-
  3.     eachCourseEachDayAtMostOneHour,
  4.     eachCourseOneProfessor,
  5.     eachCourseOneRoom,
  6.     eachCourseExactlyHours,
  7.     noSolapaRoom,
  8.     noSolapaProfe,
  9.     noSolapaYear,
  10.     relateVars,
  11.     true,!.
  12. writeClauses(_):- told, nl, write('writeClauses failed!'), nl,nl, halt.
  13.  
  14. noSolapaRoom:-
  15.     day(D), hour(H), course(C1), course(C2), C1 \= C2, room(R),
  16.     writeClause([-cdh(C1,D,H),-cdh(C2,D,H),-cr(C1,R),-cr(C2,R)]),
  17.     fail.
  18. noSolapaRoom.
  19.  
  20. noSolapaProfe:-
  21.     day(D), hour(H), course(C1), course(C2), C1 \= C2, professor(P),
  22.     writeClause([-cdh(C1,D,H),-cdh(C2,D,H),-cp(C1,P),-cp(C2,P)]),
  23.     fail.
  24. noSolapaProfe.
  25.  
  26. noSolapaYear:-
  27.     day(D), hour(H), courseYear(C1,Y), courseYear(C2,Y), C1 \= C2,
  28.     writeClause([-cdh(C1,D,H),-cdh(C2,D,H)]),
  29.     fail.
  30. noSolapaYear.
  31.  
  32. eachCourseEachDayAtMostOneHour:-
  33.     course(C), day(D),
  34.     findall(cdh(C,D,H), hour(H), L),
  35.     atMost(1,L),
  36.     fail.
  37. eachCourseEachDayAtMostOneHour.
  38.  
  39. eachCourseOneProfessor:-
  40.     course(C),
  41.     findall(cp(C,P), (courseProfessors(C,LP),member(P,LP)),L),
  42.     exactly(1,L),
  43.     fail.
  44. eachCourseOneProfessor.
  45.  
  46. eachCourseOneRoom:-
  47.     course(C),
  48.     findall(cr(C,R), (courseRooms(C,LR),member(R,LR)),L),
  49.     exactly(1,L),
  50.     fail.
  51. eachCourseOneRoom.
  52.  
  53. eachCourseExactlyHours:-
  54.     courseHours(C,Hs),
  55.     findall(cd(C,D),day(D),L),
  56.     exactly(Hs,L),
  57.     fail.
  58. eachCourseExactlyHours.
  59.  
  60. relateVars:-
  61.     course(C), day(D), hour(H),
  62.     writeClause([-cdh(C,D,H),cd(C,D)]),
  63.     fail.
  64. relateVars.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement