Lecture Notes
The notes linked below are required reading, but they are not a substitute for attending lecture and recitation. The lectures and recitation sections are tightly coupled: Lectures will assume knowledge from previous sections, and vice-versa. These notes should be read sequentially (Monday's section, Tuesday's lecture, Wednesday's section, Thursday's lecture, etc.).
Lecture topics and assignment due dates are subject to change.
| DATE | EVENT | TOPIC | LINKS |
|---|---|---|---|
| Introduction to Functional Programming | |||
| 1/22 | Lecture 1 | Course overview and background on OCaml | [Notes] |
| 1/22 | OCaml demo 7:30–9:30pm Upson B7 | ||
| 1/23 | PS 1 issued | [PS 1] | |
| 1/23 | Recitation 1 | Introduction to OCaml syntax | [Notes] [Slides] |
| 1/24 | OCaml demo 7:30–9:30pm Upson B7 | ||
| 1/24 | Lecture 2 | OCaml syntax and evaluation | [Notes] |
| 1/24 | LaTeX demo 7:30–9:30pm Upson B7 | ||
| 1/28 | Recitation 2 | Tuples, records, and pattern matching | [Notes] [Code] |
| 1/29 | Lecture 3 | Scoping, currying, and lists | [Notes] [Code] |
| 1/30 | Recitation 3 | Higher-order functions, anonymous functions, currying, side effects, printing, exceptions | [Notes] |
| 1/31 | Lecture 4 | Variants, recursive types, and polymorphism | [Notes] [Code] |
| 1/31 | PS1 due at 11:59PM; PS2 issued | [PS2] | |
| 2/4 | Recitation 4 | Pattern-matching pitfalls, more parametrized types | [Notes] |
| 2/5 | Lecture 5 | Map, fold, and the map-reduce paradigm | [Notes] [Code] |
| 2/6 | Recitation 5 | Folding and tail recursion | [Notes] |
| 2/7 | Lecture 6 | Substitution model of evaluation | [Notes] [Code] |
| 2/6 | Recitation 6 | More about the substitution model | [Notes] |
| Functional Data Structures | |||
| 2/12 | Lecture 7 | Modules, structures, and signatures | [Notes] [Code] |
| 2/13 | Recitation 7 | Functional stacks and queues, dictionaries, fractions | [Notes] |
| 2/14 | Lecture 8 | Functors: parametrized modules | [Notes] [Code] |
| 2/14 | PS2 due at 11:59PM; PS3 issued | [PS3] | |
| 2/18 | Recitation 8 | Problem Set 3 overview, splay trees | [Notes] |
| 2/19 | Lecture 9 | Abstraction functions and representation invariants | [Notes] [Code] |
| 2/20 | Recitation 9 | More about functors | [Notes] |
| 2/21 | Lecture 10 | Red-black trees | [Notes] [Code] |
| 2/25 | Recitation 10 | Mutability: refs and arrays | [Notes] |
| 2/26 | Lecture 11 | Disjoint sets | [Notes] [Code] |
| 2/27 | Recitation 11 | Functional Arrays | [Notes] |
| 2/28 | Lecture 12 | Type inference and unification | [Notes] [Code] |
| 2/28 | PS3 due at 11:59PM; PS4 issued | [PS4] | |
| Verification and Testing | |||
| 3/4 | Recitation 12 | Inductive correctness proofs | [Notes] |
| 3/5 | Lecture 13 | The Environment Model | [Notes] [Code] |
| 3/6 | Recitation 13 | Prelim review | |
| 3/7 | Lecture 14 | Logic for formal verification | [Notes] |
| 3/7 | Prelim I, Upson B17, 7:30pm | ||
| 3/11 | Recitation 14 | Prelim Debrief | |
| 3/12 | Lecture 15 | Logic continued | [Notes] |
| 3/13 | Recitation 15 | Testing | [Notes] [Image] |
| 3/14 | Lecture 16 | Predicate Logic | [Notes] [Code] |
| 3/14 | PS4 due | ||
| 3/16-3/24 | Spring Break | ||
| 3/25 | Recitation 16 | PS5 overview | [PS5] |
| Concurrency | |||
| 3/26 | Lecture 17 | Concurrency | [Notes] [Code] [Supplemental] |
| 3/27 | Recitation 17 | Concurrency: condition variables and message passing | [Notes] |
| 3/28 | Lecture 18 | Concurrency continued | [Code] |
| Analysis of Algorithms | |||
| 4/1 | Recitation 18 | Asymptotic complexity and binary search trees | [Notes] |
| 4/2 | Lecture 19 | Asymptotic complexity and recurrences | [Notes] [Code] |
| 4/3 | Recitation 19 | Master method | [Notes] |
| 4/4 | Lecture 20 | More recurrences and master method | [Notes] [Proof] |
| 4/8 | Recitation 20 | Hashing | [Notes] [Botelho] [Cichelli] [CMU] |
| 4/9 | Lecture 21 | Amortized Analysis | [Notes] |
| 4/10 | Recitation 21 | Prelim II review | |
| Other Topics | |||
| 4/11 | Lecture 22 | Representing and traversing directed graphs | [Notes] [Code] |
| 4/11 | PS5 due at 11:59PM; PS6 issued | [PS6] | |
| 4/15 | Recitation 22 | Amortized analysis examples | [Notes] |
| 4/16 | Lecture 23 | Memoization and dynamic programming | [Notes] [Code] |
| 4/16 | Prelim II, Upson B17, 7:30pm | ||
| 4/17 | Recitation 23 | PS6 / Graph algorithms | [Notes] |
| 4/18 | Lecture 24 | Locality | [Notes] [Code] |
| 4/22 | Recitation 24 | Prelim II Debrief | |
| 4/23 | Lecture 25 | Garbage collection | [Notes] |
| 4/24 | Recitation 25 | Splay trees and B-trees | [Notes] |
| 4/25 | Lecture 26 | The λ-calculus | [Notes] |
| 4/29 | Recitation 26 | Continuations and CPS conversion | [Notes] [Code] |
| 4/30 | Lecture 27 | Fixpoints and recursion | [Notes] [Slides] [Code] |
| 5/1 | Recitation 27 | Streams and lazy programming | [Notes] [Code] |
| 5/2 | Lecture 28 | Verification continued; Review | [Notes] |
| 5/2 | PS6 due | ||
| 5/10 | Final Exam, Friday, May 10 2:00–4:30 pm, HLSB14 | ||
| 5/10 | The 3110 Tournament, Philips 101, 5pm (food provided) | ||