UBC provides resources to support student learning and to maintain healthy lifestyles but recognizes that sometimes crises arise and so there are additional resources to access including those for survivors of sexual violence. UBC values respect for the person and ideas of all members of the academic community. Harassment and discrimination are not tolerated nor is suppression of academic freedom. UBC provides appropriate accommodation for students with disabilities and for religious and cultural observances. UBC values academic honesty and students are expected to acknowledge the ideas generated by others and to uphold the highest academic standards in all of their actions. Details of the policies and how to access support are available here:

This course provides an introduction to functional programming and to logic programming. This is a programming course designed to get you to think declaratively and non-procedurally. The programmers job is to specify what they want, and the computer should then determine the best way to compute it.


MWF 12:00 to 12:50pm. Room PHRM 1201. Pharmaceutical Sciences Building (PHRM), 2405 Wesbrook Mall


Instructor: David Poole,

TA office hours (see Canvas for Zoom links):

David: any day after class or by appointment (email/Piazza).

Structure of the Course

There will be 3 hours of in-class interaction per week.

We will use Canvas to view grades and Piazza for discussions (see canvas for link). All other content will be on this web site; in particular keep checking the Schedule tab for lectures, assignments, etc.

The first part of the course will be on functional programming (mainly using Haskell) and the second part will be on logic programming (mainly using Prolog, but also some semantic web languages). You will need to download and use the Haskell Platform and SWI-Prolog (get the stable release) (both are free).



The course assessment will be based on four exams and two group projects and participation.

The breakdown of marks is tentatively:

Academic integrity is essential for a university to function. Plagiarism and cheating will be treated seriously. The work you hand in must be your own, except where you have explicitly cited the source. If in doubt, put others' words in quotations and cite the source. See UBC Regulation on Plagiarism.


There will be approximately weekly assignments (except for the times when you should be working on your project). These are not meant to be time consuming, but are essential to getting you to think about programming in new ways. See the Schedule tab for upcoming assignments.

Participation marks will be given as long as the assignment is submitted before a solution is posted (which will not be until after the due time). If you want feedback about your assignment answers, ask general questions in class after the assignment is due or ask the instructor or a TA in their office hours.


There will be two group projects; one for functional programming and one for logic programming. You will need to do this in groups of 2 or 3. You cannot do it alone, and cannot do it in larger groups (if you have 4 or 5 people they should form 2 groups). You will have a TA mentor that you will submit a brief proposal to. The group will give a demo to a TA at a prearranged time. Each group will need to submit their code and a brief report. The project can be about anything, but we will provide a number of options. We will use the UBC Wiki, where you can see past projects from 2023, 2021, 2019, 2018, 2017, and 2016.