% Computer science. % Discalimer.... out of date, and doesn't quite work... Please fix note('class(identifier, name, units)'). class(cs201, 'Computer Science I', 4). class(cs202, 'Computer Science II', 4). class(cs260, 'Machine Architecture', 4). class(cs310, 'Computer Systems Organisation I', 5). class(cs311, 'Computer Systems Organisation II', 5). class(cs330, 'Data Structures', 4). class(cs320, 'Programming Languages', 4). class(cs331, 'Algorithm Analysis', 4). class(cs320, 'Programming Languages', 4). class(cs350, 'File Systems', 4). class(cs455, 'Software Engineering', 4). class(cs460, 'Operating Systems', 4). class(cs488, 'Ethics and the Computing Professional', 2). class(cs489, 'Senior Seminar', 2). class(cs410, 'Advanced Computer Architecture', 5). class(cs430, 'Data Communications and Networks', 4). class(cs480, 'Data base Systems', 4). class(cs411, 'Artificial Intelligence', 4). class(cs420, 'Computer Graphics', 4). class(cs511, 'Expert Systems', 4). class(cs540, 'System Simulation', 4). class(cs520, 'Advanced Computer Graphics', 4). class(cs575, 'Internship', 5). class(cs580, 'Advanced Data Base Systems', 4). class(cs595, 'Independent Study', Units):-member(Units, [1,2,3,4,5,6]). class(m211, 'Basic Concepts of Calculus', 4). class(m212, 'Calculus II', 4). class(m213, 'Calculus III', 4). class(m251, 'Multivariable Calculus', 4). class(m272, 'Discrete Mathematics', 4). class(m331, 'Linear Algebra', 4). class(m372, 'Combinatorics', 4). class(p221, 'General Physics I', 5). class(p222, 'General Physics II', 5). class(p223, 'General Physics III', 5). class(b100, 'Topics from Biology', 5). class(b200, 'Biology of the Cell', 5). class(scNNN, 'A different science class with a lab', 5). class(X):-class(X,_,_). note('prereq(pre-reqisite,required_for)'). prereq('Some programming and satisfactory ELM score', cs201). prereq(cs201, cs202). prereq(cs202, cs260). prereq(cs260, cs310). prereq(m272, cs310). prereq(p222, cs310). prereq(cs310, cs311). prereq(cs202, cs320). prereq(cs202, cs330). prereq(m272, cs330). prereq(cs330, cs331). prereq(m272, cs331). prereq(m372, cs331). prereq(cs330, cs350). prereq(cs311,cs410). prereq(cs330,cs411). prereq(cs330,cs420). prereq(cs260,cs430). prereq(cs310,cs430). prereq(cs330,cs430). prereq(cs330, cs455). prereq(cs330, cs460). prereq(cs460, cs465). prereq(cs260, cs470). prereq(cs320, cs470). prereq(cs330, cs470). prereq(cs350, cs480). prereq('Senior standing', cs488). prereq('Senior standing', cs489). prereq(cs331, cs500). prereq(cs331, cs505). class(cs505, 'Introduction to Theory of Computation', 4). prereq(cs330, cs511). prereq(cs331, cs515). class(cs515, 'Automated Reasoning', 4). prereq(cs420, cs520). prereq(cs330, cs540). prereq(cs480, cs580). prereq('Satisfactory ELM score', m211). prereq(m211, m212). prereq(m212, m213). prereq(m212, m251). prereq('Satisfactory ELM score', m272). prereq(m213, m372). prereq(m211, p221). prereq(p221, p222). prereq(p222, p223). elective1([cs410, cs430, cs480]). elective2([cs411, cs420, cs511, cs540]). elective3([cs450, cs470, cs500]). required([cs201,cs202,cs260,cs310,cs311,cs320,cs330,cs350,cs455,cs460,cs488,cs489]). required(X):-required(Y),!,member(X,Y). units([], 0). units([Class|More], Total) :- class(Class, _, Units), units(More, TotalOfMore), Total is TotalOfMore + Units. units(Class, T):-class(Class, _, T). units(X):-units(X,T),write('Total='), write(T), nl. before(X, Y) :- prereq(X, Y). before(X, Y) :- prereq(X, Z), before(Z, Y). check_order([]). check_order([Class]):-class(Class). check_order([Class1, Class2|Rest]):- before(Class1, Class2), check_order([Class2|Rest]). sequence(X, U):-check_order(X), units(X,U). :-nl. :-nl. :-print('prereq, class, units, before, check_order, sequence, elective are loaded'). :-print(' What does this query do: sequence(P, 8)? How about sequence(P,6)?'). :-nl. :-nl. program([],0). program([X],U):-class(X, _ , U). program([X|Y],U):-class(X, _ , UX), UY is U-UX,program(Y,UY), notafter(X,Y), prepared([X],Y). prepared(_,[]). prepared(X,[Y|Z]):-prereqs(X,[Y|Z]), prepared([Y|X],Z). prereqs(X,[Y|_]):-prereq(P,Y),nonmember(P,X),write('Needs '),write(P),write(' for '), write(Y), nl, false. prereqs(_,[_|_]). nonmember(_,[]). nonmember(P,[Y|Z]):-P\==Y, nonmember(P,Z). notafter(_, []). notafter(Class, [First|Rest]):-Class\==First, not prereq(First, Class), notafter(Class,Rest). preceeds(_, []). preceeds(Class, [First|Rest]):-before(Class, First), preceeds(Class,Rest).