There is a script that can scrape the CSE department of UCSD for courses, their names, number of unites, descriptions, and requirements. get_all_link will create link for each course page depend on input Quarter and CourseID. parsePrereq will take that link and creat list of prerequirest for that course, and list_to_bool will convert that list to boolean expression. prereq_proc will process such expression and output all possible combination of courses needed to take. builddb will build course database and build/2 will build requirement database based course database and input Quarter.
$ swipl -s builddb.pl
This creates a "database" file, db.pl, used by the backend.
####backend predicates:
===for front end use===
#####getPrereq:
getprereq_fact/3: take Course ID, quarter, and third arg will be requirement fact
getprereq_list/3: same as getprereq_fact, it third arg will be all combination of course needed to take
build/2: take Quarter and file name, then create requirment database
for detial explanation and usage, check each inside the file.
======old predicates=====
courses/1 and course_ids/1. courses/1 can
be used to get a list of all courses. The result is a list with one
element per course. Each element is a term course/5.
requirement_to_list/3: takes Dept and course ID (in atom) and able to get all
possible combination of prerequisites of that course (an atom list).
requirement_to_string/3: same as above, output combination in string format.
####Handcodeddb are coded with following data format, with arguments: #####major/2
- Department name code
- Department full name
#####course/5
- Course ID, an atom
- Course Title, an SWI7-style string
- Units, a term (see below)
- Text description, an SWI7-style string
- Prerequisites, an atom (for now)
#####requirement/3
- Department/major name code (atom)
- Course ID (atom)
- boolean expression of prerequisites, Course ID are in form of id('Dept','#').
Units are represented as one of three terms:
exactly(Units): a course is worthUnitsunits (an integer)from_to(From, To): a course is worth anything fromFromtoTounitsone_of(List): a course is worth one of the integer values inList
The course_ids/1 can be used to get a list of all course IDs.
- Course ID, an atom
['CSE 3', 'CSE 12', ....].
The user should decide how to represent these for a human reader.