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