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.

DATE EVENT TOPIC LINKS
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]
Concurrency
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]
Topics
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]