Skip to main content

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.

Introduction to Functional Programming
1/25 Lecture 1 Course overview and background on ML [Notes] [Code]
1/26 PS1 issued [PS1]
1/26 Recitation 1 Introduction to OCaml syntax [Notes]
1/26 OCaml demo, 7:30–9pm, Upson B7 Lab (Boris, Oneek) [Code]
1/27 Lecture 2 OCaml syntax and evaluation [Notes] [Code]
1/27 OCaml demo, 7:30–9pm, Upson B7 Lab (Lucas, Nick) [Code]
1/31 Recitation 2 Tuples, records, and pattern matching [Notes] [Code]
2/1 Lecture 3 Scope, currying and lists [Notes] [Code]
2/2 Recitation 3 Higher-order functions, anonymous functions, currying, side effects, printing, exceptions [Notes]
2/2 LaTeX demo, 5pm, Hollister B14 (Constantine, Boris, Gautam)
2/3 Lecture 4 Variants, recursive types, and polymorphism [Notes] [Code]
2/3 PS1 due, PS2 issued [PS1] [PS2]
2/3 OCaml demo, 7:30–9pm, Upson B7 Lab (Jean-Baptiste) [Code]
2/7 Recitation 4 Pattern-matching pitfalls, more parameterized types [Notes]
2/8 Lecture 5 Map, fold and the map-reduce paradigm [Notes] [Code]
2/9 Recitation 5 Folding and tail recursion [Notes]
2/10 Lecture 6 Substitution model of evaluation [Notes] [Code]
2/14 Recitation 6 More about the substitution model [Notes]
Functional Data Structures
2/15 Lecture 7 Modules, structures, and signatures [Notes] [Code]
2/16 Recitation 7 Functional stacks and queues, dictionaries, fractions [Notes]
not given Lecture 8 Abstraction functions and representation invariants [Notes] [Code]
2/17 Lecture 9 Functors: parameterized modules [Notes] [Code]
2/17 PS2 due, PS3 issued [PS2] [PS3]
2/21 Recitation 8 PS3 overview [Notes]
2/22 Lecture 10 Functional data structures: red-black trees [Notes] [Code]
2/23 Recitation 9 More about functors [Notes]
2/24 Lecture 11 Mutable data structures: disjoint set-forests [Notes] [Code]
2/28 Recitation 10 Mutability: refs and arrays [Notes]
3/1 Lecture 12 The Environment Model [Notes] [Code]
3/2 Recitation 11 Functional Arrays [Notes] [Code]
3/3 PS3 due, PS4 issued [PS3] [PS4]
Verification and Testing
3/3 Lecture 13 Logic for formal verification [Notes]
3/7 Recitation 12 Inductive correctness proofs [Notes]
3/8 Lecture 14 Verification cont'd [Notes]
3/9 Recitation 13 Prelim 1 review [Notes]
3/10 Lecture 15 Verification cont'd [Notes]
3/10 Prelim Exam, 7:30–9pm, Upson B17
3/14 Recitation 14 Testing [Notes]
3/15 Lecture 16 Verification cont'd [Notes]
3/16 Recitation 15 PS5 overview [PS5]
3/17 Lecture 17 Concurrency: multi-threading and mutexes [Notes] [Code]
3/17 PS4 due, PS5 issued [PS4] [PS5]
3/19–3/27 Spring Break
3/28 Recitation 16 Concurrency: condition variables and message passing [Notes]
Data Structures and Analysis of Algorithms
3/29 Lecture 18 Asymptotic complexity and recurrences [Notes] [Code]
3/30 Recitation 17 Asymptotic complexity and binary search trees [Notes]
3/31 Lecture 19 Master method [Notes] [Proof]
4/4 Recitation 18 Solving recurrences [Notes]
4/5 Lecture 20 Amortized analysis and resizing hash tables [Notes]
4/6 Recitation 19 Using the substitution and master methods [Notes]
4/7 Lecture 21 Representing and traversing directed graphs [Notes] [Code]
4/11 Recitation 20 Amortized analysis examples [Notes]
4/12 Lecture 22 Memoization and dynamic programming [Notes] [Code]
4/13 Recitation 21 Graph algorithms [Notes]
4/14 Lecture 23 Streams and lazy evaluation [Notes] [Code]
4/14 PS5 due, PS6 issued [PS5] [PS6]
4/18 Recitation 22 PS6 overview [PS6]
4/19 Lecture 24 Prelim 2 review [Notes]
4/19 Prelim Exam, 7:30–9pm, Upson B17 [Topics]
4/20 Recitation 23 Locality [Notes]
4/21 Guest Lecture "Effective ML", Yaron Minsky, Jane Street
4/25 Recitation 24 B-trees [Notes]
4/26 Lecture 25 Garbage Collection [Notes]
4/27 Recitation 25 Splay trees [Notes] [Code]
4/28 Lecture 26 Type inference and unification [Notes] [Code]
5/2 Recitation 26 Continuations and CPS conversion [Notes] [Code]
5/3 Lecture 27 Introduction to the λ-calculus [Notes]
5/4 Recitation 27 Course review [Notes] [Code]
5/5 Lecture 28 Fixpoints and recursion [Notes] [Code]
5/5 PS6 due [PS6]
5/12 Final Exam, 2–4:30pm, Hollister B14 [Topics]
5/14 The 3110 Tournament, Upson B17, 5–8pm (pizza provided) [Info]