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? 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 110. First class: Wednesday Sep 06, 2017.


Instructor: David Poole, Office hours: after class + Mondays 11:00-11:50 + Fridays 1:00-1:50pm or by appointment (room ICCS 109).

Teaching Assistants:

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 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 logic programming (mainly using Prolog, but also about semantic web languages), and the second part will be on functional programming (mainly using Haskell). You will need to download and use SWI-Prolog (get the stable release) and the Haskell Platform (both are free).



The course assessment will be based on assignments, in-class participation, and exams. Assignments will be a mix of short (one week) assignments, and two "projects" which will be longer assignments, where you will choose what you work on.

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.

Late assignments will not be accepted after a solution is posted (which will not be until after the due time). Assignments will be lightly marked (mainly for participation, but also for common errors). If you want detailed feedback, ask general questions in the class after the assignment is due or ask a TA in their office hours.


There will be two group projects; one for logic programming and one for functional 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: 2017-9-03, David Poole