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/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]