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/24 | Lecture 1 | Course overview and background on ML | [Notes] |
1/25 | PS1 issued | [PS 1] | |
1/25 | Recitation 1 | Introduction to OCaml syntax | [Notes] |
1/25 | OCaml demo, 7:30–9pm, Phillips 318 Lab (Michael and Oneek) | [Demo] | |
1/26 | Lecture 2 | OCaml syntax and evaluation | [Notes] |
1/26 | OCaml demo, 7:30–9pm, Upson B7 Lab (Greg and Sam) | [Demo] | |
1/30 | Recitation 2 | Tuples, records, and pattern matching | [Notes] [Code] |
1/31 | Lecture 3 | Scope, currying and lists | [Notes] [Code] |
1/31 | LaTeX demo at 6pm (Location TBD) | [Notes] | |
2/1 | Recitation 3 | Higher-order functions, anonymous functions, currying, side effects, printing, exceptions | [Notes] |
2/2 | Lecture 4 | Variants, recursive types, and polymorphism | [Notes] [Code] |
2/2 | PS1 due, PS2 issued | [PS 2] | |
2/6 | Recitation 4 | Pattern-matching pitfalls, more parameterized types | [Notes] |
2/7 | Lecture 5 | Map, fold and the map-reduce paradigm | [Notes] [Code] |
2/8 | Recitation 5 | Folding and tail recursion | [Notes] |
2/9 | Lecture 6 | Substitution model of evaluation | [Notes] [Code] |
2/13 | Recitation 6 | More about the substitution model | [Notes] |
Functional Data Structures | |||
2/14 | Lecture 7 | Modules, structures, and signatures | [Notes] [Code] |
2/15 | Recitation 7 | Functional stacks and queues, dictionaries, fractions | [Notes] |
2/16 | Lecture 9 | Functors: parameterized modules | [Notes] [Code] |
2/16 | PS2 due, PS3 issued | [PS 3] [Code] | |
2/20 | Recitation 8 | PS 3 Overview | |
2/21 | Lecture 10 | Abstraction functions and representation invariants | [Notes] [Code] |
2/22 | Recitation 9 | More about functors | [Notes] |
2/23 | Lecture 11 | Functional data structures: red-black trees | [Notes] [Code] |
2/27 | Recitation 10 | Mutability: refs and arrays | [Notes] |
2/28 | Lecture 12 | Mutable data structures: disjoint set-forests | [Notes] [Code] |
2/29 | Recitation 11 | Functional Arrays | [Notes] |
3/1 | PS3 due, PS4 issued | [PS 4] [Code] | |
3/1 | Lecture 13 | The Environment Model | [Notes] [Code] |
Verification and Testing | |||
3/5 | Recitation 12 | Inductive correctness proofs | [Notes] |
3/6 | Lecture 14 | Logic for formal verification | [Notes] [Slides] |
3/7 | Recitation 13 | Prelim 1 review | |
3/8 | Lecture 15 | Logic continued | [Notes] [Code] |
3/8 | Prelim Exam, 7:30–9pm, Phillips 101 | ||
3/12 | Recitation 14 | Testing | [Notes] [Image] |
3/13 | Lecture 16 | Predicate Logic | [Notes] [Code] |
3/14 | Recitation 15 | Prelim Discussion | |
Concurrency | |||
3/15 | Lecture 17 | Verification continued | [Notes] |
3/15 | PS4 due | ||
3/17–3/25 | Spring Break | ||
3/26 | Recitation 16 | PS 5 Overview | [PS5] [Code] [Karma] |
3/27 | Lecture 18 | Concurrency | [Notes] [Code] |
Data Structures and Analysis of Algorithms | |||
3/28 | Recitation 17 | Concurrency: condition variables and message passing | [Notes] |
3/29 | Lecture 19 | Asymptotic complexity and recurrences |
[Complexity review] [Notes] [Code] |
4/2 | Recitation 18 | Asymptotic complexity and binary search trees | [Notes] |
4/3 | Lecture 20 | Master method | [Notes] [Proof] |
4/4 | Recitation 19 | Solving Recurrences and using master methods | [Notes] |
4/5 | Lecture 21 | Amortized analysis | [Notes] |
4/9 | Recitation 20 | Using substitution and master methods | [Notes] |
4/10 | Lecture 22 | Representing and traversing directed graphs | [Notes] [Code] |
4/11 | Recitation 21 | Amortized analysis examples | [Notes] |
Topics | |||
4/12 | Lecture 23 | Memoization and dynamic programming | [Notes] [Code] |
4/12 | PS5 due, PS6 issued | [PS 6 writeup] [Code] | |
4/16 | Recitation 22 | Prelim 2 review | |
4/17 | Lecture 24 | Erlang: Robbert Van Renesse | |
4/17 | Prelim Exam, 7:30–9pm, Upson B17 | ||
4/18 | Recitation 23 | PS 6 Overview | [PS 6 writeup] [Code] |
4/19 | Lecture 25 | Locality | [Notes] [Code] |
4/23 | Recitation 24 | Graph algorithms | [Notes] |
4/24 | Lecture 26 | Garbage Collection | [Notes] [Code] |
4/25 | Recitation 25 | Splay trees and B-trees | [Notes] |
4/26 | Lecture 27 | Type inference and unification | [Notes] [Code] |
4/30 | Recitation 26 | Continuations and CPS conversion | [Notes] [Code] |
5/1 | Lecture 28 | Introduction to the λ-calculus | [Notes] |
5/2 | Recitation 27 | Streams and Lazy programming | [Notes] [Code] |
5/3 | Lecture 29 | Fixpoints and recursion | [Notes] [Slides] [Code] |
5/3 | PS6 due | ||
5/11 | Final Exam, 2:00–4:30pm, Phillips 101 | ||
5/12 | The 3110 Tournament, Upson B17, 5–8pm (pizza provided) | [Tournament Info] |