Announcements

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: https://senate.ubc.ca/policies-resources-support-student-success.

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.

Classes:

MWF 1:00pm to 1:50pm. Zoom links on Canvas.

Personnel:

Instructor: David Poole, poole@cs.ubc.ca. Office hours: immediately after class or by appointment.

Teaching Assistants and office hours: see Canvas.

Structure of the Course

There will be 3 hours of in-class interaction per week. Before each clas (except the first) there will be a pre-class video, where we cover the content. The class is for demos, discussions and questions.

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).

Textbook

Assessment

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.

Assignments

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.

Projects

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 2019 and 2018 and 2017, and 2016.


Last updated: 2020-12-22, David Poole