Course:CPSC312-2019-yexiu-isaac-p2

From UBC Wiki

UBC Degree Planner/Prerequisites Checker

Authors: Yexiu Zhou, Isaac Cheung

What is the problem?

We will be building a Prolog implementation of a Degree Planner to determine the feasibility of using Prolog to develop validation software.

Since this is just a feasibility study, the scope of the degree planner will be limited to the CPSC major in the Faculty of Science.

What is the something extra?

Can answer multiple types of questions regarding course requirements.

Ability to load transcript from file instead of manually inputting it.

Uses NLP as a query interface.

What did we learn from doing this?

We were able to complete the project with Prolog.

Some problems we had to overcome were that:

  • Scoping out the graduation requirement as the possible ways to graduate were more than initially assumed
  • Generating the knowledge base manually
  • Like with the first project initially we were fighting against the language instead of fully utilizing it's strengths (Pattern matching)
  • Figuring out a way to sometimes double count course credits and sometimes to not do that

Some things that we found Prolog did very well:

  • The syntax was very readable
  • Basic NLP implementation
  • Storing data (did this especially well)

Some issues we noticed about using Prolog as a Degree Planner:

  • Knowledge base becomes very large very quickly when we widen the scope, manually inputting data does not seem viable however there is likely a tool we can use for it.
  • Certain information needs to be hard coded in, making scalability and maintainability a potential issue later on down the road. This could be remedied through smart planning and there is likely also a tool we can use to simplify it.

Overall, we think that Prolog was suitable for creating a degree planner, and that potential problems that may exist can be circumvented rather easily. From our study, Prolog and logical programming as a whole seems like it should be more widely used in the industry for these sort of tasks.

Links to code etc

https://github.com/yexiuzhou/CPSC312-Project2