medusa% cat courses.pl
/****************** courses ************************************/
/*** this is the main course data in coded form ****************/
spring_2003_courses(cs3233, 1230-tr,  tian).
spring_2003_courses(cs3343, 1530-tr,  kwek).
spring_2003_courses(cs3723, 1200-mwf, wagner).
spring_2003_courses(cs3733, 1230-tr,  srobbins).
spring_2003_courses(cs3773, 1730-tr,  lo).
spring_2003_courses(cs4313, 1400-mw,  bylander).
spring_2003_courses(cs4363, 1000-mwf, wagner).
spring_2003_courses(cs4383, 1300-mwf, maynard).
spring_2003_courses(cs4753, 1730-mw,  yum).
spring_2003_courses(cs4953, 0930-tr,  srobbins).

/***************** times ***************************************/
/**** match normal time with coded time ************************/
timemwf(0900-mwf, 'MWF', '0900-0950am').
timemwf(1000-mwf, 'MWF', '1000-1050am').
timemwf(1100-mwf, 'MWF', '1100-1150am').
timemwf(1200-mwf, 'MWF', '1200-1250pm').
timemwf(1300-mwf, 'MWF', '0100-0150pm').
timemwf(1400-mw,  'MW ', '0200-0315pm').
timemwf(1530-mw,  'MW ', '0330-0445pm').
timemwf(1730-mw,  'MW ', '0530-0645pm').

timetr(0930-tr,   'TR ', '0930-1045am').
timetr(1100-tr,   'TR ', '1100-1215pm').
timetr(1230-tr,   'TR ', '1230-0145pm').
timetr(1400-tr,   'TR ', '0200-0315pm').
timetr(1530-tr,   'TR ', '0330-0445pm').
timetr(1730-tr,   'TR ', '0530-0645pm').
/******************* courses ***************************************/
/***** match name and number of course with coded course ***********/
courses(cs3233,  'CS 3233', 'Discrete Math Structures').
courses(cs3343,  'CS 3343', 'Analysis of Algorithms  ').
courses(cs3723,  'CS 3723', 'Programming Languages   ').
courses(cs3733,  'CS 3733', 'Operating Systems       ').
courses(cs3773,  'CS 3773', 'Software Engineering    ').
courses(cs4313,  'CS 4313', 'Automata and Formal Lang').
courses(cs4363,  'CS 4363', 'Cryptography            ').
courses(cs4383,  'CS 4383', 'Computer Graphics       ').
courses(cs4753,  'CS 4753', 'Computer Architecture   ').
courses(cs4953,  'CS 4953', 'SS-CS: Experiment in CS ').
/***************** faculty *************************************/
/***** match full name and office with coded name **************/
faculty(bylander, 'Tom Bylander ', 'SB 3.02.05B').
faculty(kwek,     'Steven Kwek  ', 'SB 3.02.01E').
faculty(lo,       'Dan Lo       ', 'SB 3.02.02 ').
faculty(maynard,  'Hugh Maynard ', 'SB 3.02.05G').
faculty(srobbins, 'Steve Robbins', 'SB 3.02.01A').
faculty(tian,     'Qi Tian      ', 'SB 3.02.00 ').
faculty(wagner,   'Neal Wagner  ', 'SB 3.02.16 ').
faculty(yum,      'Ki Hwan Yum  ', 'SB 3.02.05C').

/***** first print raw course data ****************************/
spring_2003_courses_print_simple(_) :- spring_2003_courses(Course,Time,Fac),
 write(Course), write('\t'), write(Time), write('  \t'), write(Fac), nl, fail.

/***** print data in non-coded form ***************************/
spring_2003_courses_print(_) :- spring_2003_courses(Course,Time,Fac),
 courses(Course, Pcoursenum, Pcoursename),
 (timemwf(Time,Pdays,Ptime) | timetr(Time,Pdays,Ptime)),
 write(Pcoursenum), write(' '), write(Pcoursename), write('  '),
 write(Pdays), write(' '), write(Ptime), write('  '),
 faculty(Fac,Pfac, Poffice), write(Pfac), write(' '), write(Poffice),nl, fail.

/***** the rest is to print faculty first, then courses *******/
spring_2003_courses_faculty_print(_) :-
  faculty(Fac,Pfac,_), write(Pfac), write('  '),
  semester_faculty_print(Fac).

semester_faculty_print(Fac) :- 
 spring_2003_courses(Course,Time,Fac), courses(Course,Pcoursenum,Pcoursename),
 (timemwf(Time,Pdays,Ptime) | timetr(Time,Pdays,Ptime)),  write('\t'),
 write(Pcoursenum), write(', '), write(Ptime), write(' '),
 write(Pdays), write(' ('), write(Pcoursename), write(')'),nl, fail.

medusa% pl
?- consult(courses_old).
Yes

?- spring_2003_courses_print_simple(_).
cs3233  1230-tr         tian
cs3343  1530-tr         kwek
cs3723  1200-mwf        wagner
cs3733  1230-tr         srobbins
cs3773  1730-tr         lo
cs4313  1400-mw         bylander
cs4363  1000-mwf        wagner
cs4383  1300-mwf        maynard
cs4753  1730-mw         yum
cs4953  930-tr          srobbins
No

?- spring_2003_courses_print(_).
CS 3233 Discrete Math Structures  TR  1230-0145pm  Qi Tian       SB 3.02.00 
CS 3343 Analysis of Algorithms    TR  0330-0445pm  Steven Kwek   SB 3.02.01E
CS 3723 Programming Languages     MWF 1200-1250pm  Neal Wagner   SB 3.02.16 
CS 3733 Operating Systems         TR  1230-0145pm  Steve Robbins SB 3.02.01A
CS 3773 Software Engineering      TR  0530-0645pm  Dan Lo        SB 3.02.02 
CS 4313 Automata and Formal Lang  MW  0200-0315pm  Tom Bylander  SB 3.02.05B
CS 4363 Cryptography              MWF 1000-1050am  Neal Wagner   SB 3.02.16 
CS 4383 Computer Graphics         MWF 0100-0150pm  Hugh Maynard  SB 3.02.05G
CS 4753 Computer Architecture     MW  0530-0645pm  Ki Hwan Yum   SB 3.02.05C
CS 4953 SS-CS: Experiment in CS   TR  0930-1045am  Steve Robbins SB 3.02.01A
No

?- spring_2003_courses_faculty_print(_).
Tom Bylander    CS 4313, 0200-0315pm MW  (Automata and Formal Lang)
Steven Kwek     CS 3343, 0330-0445pm TR  (Analysis of Algorithms  )
Dan Lo          CS 3773, 0530-0645pm TR  (Software Engineering    )
Hugh Maynard    CS 4383, 0100-0150pm MWF (Computer Graphics       )
Steve Robbins   CS 3733, 1230-0145pm TR  (Operating Systems       )
                CS 4953, 0930-1045am TR  (SS-CS: Experiment in CS )
Qi Tian         CS 3233, 1230-0145pm TR  (Discrete Math Structures)
Neal Wagner     CS 3723, 1200-1250pm MWF (Programming Languages   )
                CS 4363, 1000-1050am MWF (Cryptography            )
Ki Hwan Yum     CS 4753, 0530-0645pm MW  (Computer Architecture   )
No
?- halt.