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.