Syllabus
| Class | Topic | Reading |
| 1 | Intro, Imperative languages, Control Structures | Barnes |
| 2 | Types, Procedures, Parameter Passing | |
| 3 | Block Structure, Scoping, Modularization, Ada Packages | |
| 4 | Ada Exceptions, Ada Generics | |
| 5 | Concurrency, Ada Tasks, new Ada95 features | |
| 6 | Applicative/Declarative Languages, LISP, Scheme | Slides |
| 7 | Scheme Programming | Scheme Report |
| 8 | Scheme Programming | |
| 9 | Interpretation, | Slides, code |
| 10 | Garbage Collection | Slides |
| 11 | Lambda Calculus | Slides |
| 12 | Denotational Semantics | Slides, code |
| 13 | Denotational Semantics | |
| 14 | Functional Programming, ML | Paulson |
| 15 | Functional Programming, ML | |
| 16 | Operational semantics | Slides |
| 17 | Polymorphic type inference, unification | Slides |
| 18 | Logic Programming, Prolog | Shapiro: Chap 1-3 |
| 19 | Prolog Programming, Unification revisited | Shapiro: Chap 4-7 |
| 21 | Prolog Programming, Cut | Shapiro: Chap 8-11 |
| 22 | Prolog Programming | Shapiro: Chap 12-13 |
| 23 | SETL | SETL manual |
| 24 | SETL | |
| 25 | Static typing of objects and classes (OCaml) | Handout |
| 26 | Static typing of objects and classes (OCaml) | |
| 27 | Modules as a programming language (if time allows) | Handout |