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 | |||
8/23 | Lecture 1 | Course overview and background on OCaml | [Slides] |
8/23 | PS 1 issued | [PS 1] | |
8/23 | OCaml demo 7–9pm Upson B7 | ||
8/24 | OCaml demo 7–9pm Upson B7 | ||
8/27 | Recitation 1 | Introduction to OCaml syntax | [Notes] [Slides] |
8/28 | Lecture 2 | OCaml syntax and evaluation | [Notes] |
8/29 | Recitation 2 | Tuples, records, and pattern matching | [Notes] [Slides] [Code] |
8/30 | Lecture 3 | Lexical scope | [Notes] |
9/3 | Recitation 3 | Labor day; no class | |
9/4 | Lecture 4 | Guest Lecture: Currying, Induction by Nate Foster | |
9/5 | Recitation 3 | Higher-order functions, anonymous functions, currying, side effects, printing, exceptions | [Notes] |
9/6 | Lecture 5 | Quiz 1; Induction | [Notes] |
9/6 | PS1 due at 11:59PM; PS2 issued (due 9/20) | [PS2] | |
9/10 | Recitation 4 | Folding and tail recursion | [Notes] |
Data Structures and Programming Models | |||
9/11 | Lecture 6 | Parameterized types, map, and fold | [Notes] |
9/10 | Recitation 5 | Pattern-matching pitfalls, more parameterized types | [Notes] |
9/13 | Lecture 7 | Substitution Model | [Notes] |
9/17 | Recitation 6 | More on the substitution model | [Notes] |
9/18 | Lecture 8 | Inductive proofs of program correctness | [Notes] |
9/19 | Recitation 7 | Inductive proofs of program correctness | [Notes] |
9/20 | Lecture 9 | Shortest paths | [Notes] |
9/20 | PS2 due; PS3 issued | [PS3] | |
9/24 | Recitation 8 | Dijkstra's Algorithm | |
9/25 | Lecture 10 | Modules | |
9/26 | Recitation 9 | Modules | [Notes] |
9/27 | Lecture 11 | Tries | [Notes] |
10/1 | Recitation 10 | Prelim review | |
10/2 | Lecture 12 | Red-black trees | [Notes] |
10/2 | Prelim Exam 7:30–9 pm, Thurston Hall 203/205 | ||
10/3 | Recitation 11 | Prelim debrief | |
Concurrency and Side Effects | |||
10/4 | Lecture 13 | Streams and Lazy Evaluation | [Notes] |
10/4 | PS3 due; PS4 issued | [PS4] | |
10/10 | Recitation 12 | Refs, more side effects in OCaml | [Notes] |
10/11 | Lecture 14 | Guest Lecture: Nate Foster | [Notes] |
10/15 | Recitation 13 | Environment Model | [Notes] |
10/16 | Lecture 15 | Concurrent Programming | [Notes] |
10/17 | Recitation 14 | Disjoint Sets | [Notes] [Code] |
10/18 | Lecture 16 | Guest Lecture: Yaron Minsky | [Effective OCaml] |
10/18 | PS4 due; PS5 issued | [PS5] | |
10/22 | Recitation 15 | PS5 overview | |
10/23 | Lecture 17 | Concurrent Programming | [Notes] |
10/24 | Recitation 16 | Threads, Condition Variables | [Notes] |
10/25 | Lecture 18 | Hashing | [Notes] [Botelho] [Cichelli] [CMU] |
Data Structures and Analysis of Algorithms | |||
10/29 | Recitation 17 | Basics complexity, recurrences | [Notes] |
10/30 | Lecture 19 | Amortized Analysis | [Notes] |
10/31 | Recitation 18 | Master Method | [Notes] [Proof of Master Method] |
11/1 | Lecture 20 | Locality | [Notes] |
11/5 | Recitation 19 | Prelim 2 Review | |
11/6 | Lecture 21 | B Trees | [Notes] |
11/7 | Recitation 20 | Splay Trees & B Trees | [Splay Trees] [Code] [B-Trees] |
11/8 | Lecture 22 | Garbage Collection | [Notes] |
11/8 | PS5 due; PS6 issued | [PS6] | |
11/12 | Recitation 21 | CPS, PS6 overview | [Notes] |
11/13 | Lecture 23 | Abstraction & Verification | [Notes] |
11/13 | Prelim Exam 7:30–9 pm, Upson B17 | ||
Other Topics | |||
11/14 | Recitation 22 | Prelim debrief, PS6 overview | |
11/15 | Lecture 24 | The Lambda Calculus | [Notes] |
11/19 | Recitation 23 | Lambda Calculus Encodings | [Notes] |
11/20 | Lecture 25 | Guest lecture by Ross Tate | |
11/26 | Recitation 24 | Amorized Analysis Review | [Notes] |
11/27 | Lecture 26 | Big Data | [Notes] |
11/28 | Recitation 25 | Combinators, final review | |
11/29 | Lecture 27 | Computability | [Notes] |
11/30 | PS6 due | ||
12/5 | Final Exam, 7–9:30 pm, 305 Ives |