University of Oxford Logo University of OxfordDepartment of Computer Science - Home

Principles of Programming Languages:  2011-2012

Information

Lecturer

Practical Coordinator

Degrees

Schedule B2Computer Science

Schedule B2Mathematics and Computer Science

Schedule BMSc in Computer Science

Term

Overview

This course use interpreters written in Haskell as a vehicle for exploring various kinds of programming languages.

PRACTICALS

  1. Translation between recursive and iterative algorithms in a simple functional language.
  2. Semantics of a language with call-by-name and assignable variables.

Learning outcomes

 After taking this course, students will be able to:

Prerequisites

Functional programming.

Synopsis

  1. Introducing Fun, with familiar examples rewritten in the language.
  2. The concrete and abstract syntax of Fun.
  3. A metacircular interpreter for Fun. Examples of evaluation.
  4. Changing the interpreter to support assignable variables, with references as expressible values (like ML).
  5. Implementing while by recursion.
  6. Changing the interpreter to support output; extracting common features of memory and output.
  7. Interpreters in monadic form.
  8. Review: a language with exceptions.
  9. A purely functional language with call by name and lazy data structures.
  10. The language Fungol, where identifiers are bound to assignable variables, and derefencing is implicit.
  11. Call by value and call by reference.
  12. Nondeterministic programs for bactracking search.
  13. Logical variables and logic programming.
  14. Introducing continuations
  15. Continuations and abstract machines
  16. First-class continuations

Syllabus

Abstract and concrete syntax. Definitional interpreters in direct and monadic form. Functional, imperative, and logic programming. Expressible and denotable values; call by value and call by name. Continuations and abstract machines.

Reading list

The course explores many of the same themes that are covered in

However, that book contains interpreters written in Scheme, and we will use Haskell. Full notes for the course (in the form of a draft book) will be handed out in lectures and put on the web.