This course provides an introduction to logic programming and to functional programming. This is a programming course designed to get you to think declaratively and non-procedurally. If you think that changing the value of a variable is a weird thing to do both from a human's perspective (just what does a variable's value mean if it keeps changing?) and from a computer's perspective (if the value was used for something else, does that value also have to change? If something is already computed can't the old value just be retrieved? We can optimize code better if we know what it means. "Undo" becomes trivial.) then this course is for you.


MWF 12:00pm to 12:50pm, room DMP 310.


Instructor: David Poole, Office hours: Mondays 1-3 room ICCS 109 + I will have time immediately after class or by appointment.

Teaching Assistants:

See Canvas for rooms and any changes.

Structure of the Course

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

We will use iclickers for this course. Every day there will be clicker questions about the previous and current classes.

We will use Canvas for discussions, clicker registration and to view grades. 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.

Last updated: 2019-11-03, David Poole