Warning: The schedule may change slightly; refresh your browser every week or so!

Dates Topic Notes/Code Reading
The Basics
W Sep 6 OCaml Introduction Intro,, Functional Basics, Type Checking, Optional: RWO pp 1-10
Sep 7-8 Precept 1: OCaml Intro .merlin (fizzbuzz solution)
M Sep 11 Simple Immutable Data: Variables, Tuples, Options Let, Functions, Tuples Type-directed Programming;
Optional: RWO Chap 2
Tu Sep 12 Assign 1 Due
W Sep 13 Thinking Inductively Options, Lists, Sort, Java Rant Thinking Inductively;
Optional: RWO Chap 3
Sep 14-15 Precept 2: Lists, Options, Polymorphism
M Sep 18 Poly-HO: Polymorphism and Higher-Order Programming C rant, map/reduce, Poly HO! Polymorphism and Higher-order Programming
Tu Sep 19 Assign 2 Due
W Sep 20 More Data! Datatypes, Optional: RWO Chapter 6
Sep 21-22 Precept 3: Assignment 3, Map, Fold and Datatypes;
Reasoning About Programs
M Sep 25 Building Interpreters Abstract syntax, Substitution and evaluation Operational Semantics
Tu Sep 26 Assign 3 Due
W Sep 27 More Interpreters Model of OCaml, Assignment 4; simple interpreter code:; with recursive functions:
Sep 28-29 Precept 4: Assignment 4 and More About Closures;
M Oct 2 How OCaml uses memory Space model (and pruning closures); simple interpreter code:; with recursive functions:
W Oct 4 Proving Programs Correct Simple proofs, Induction for naturals, Induction for lists Equational Reasoning
Oct 5-6 Precept 5: Mutually Recursive Types, Equational Reasoning; (#4) (Sample solution, with proofs); (solution)
M Oct 9 More Correctness Proofs Induction for datatypes, Proofs about programming languages Equational reasoning about data types
Optional Reading: Odd-Order Theorem; Four-Color Theorem
Tu Oct 10 Assign 4 Due
W Oct 12 Generalizing your Induction Hypothesis Generalized induction hypotheses; OCaml as compiled
Oct 12-13 Precept 6: Tail Recursion and More Equational Reasoning
Oct 16-20 Fall break
M Oct 23 ML Modules Simple modules, Design choices Optional: RWO Chap 4 (Modules), 9 (Functors)
W Oct 25 Midterm Exam Part I (in lecture)
Th Oct 26 Midterm Exam Part II (7:30pm)
M Oct 30 Modules and Assignment 5 Functors, Module evaluation
(continuing the slide deck from last week)
W Nov 1 Reasoning about Modules Representation Invariants Optional: Abstraction and Representation Invariants
Nov 2-3 Precept 8: Modules ;
M Nov 6 Module Equivalence Module Equivalence, Mechanized proofs
Mutation & Laziness
W Nov 8 Mutation Mutable References Optional: RWO Chapter 8
Nov 9-10 Precept 9: Reasoning about Modules range.mli;
exercise9.txt (Solution)
M Nov 13 Functional programming in industry Interview with Josh Berdine
W Nov 15 Lazy Evaluation Laziness and Streams
Nov 16-17 Precept 10: Laziness & Monads
M Nov 20 Computability Computability Optional reading: The Birth of Computer Science at Princeton in the 1930s
Tu Nov 21 Assign 5 Due
Thanksgiving Break
Type Systems
M Nov 27 Type Checking Type Systems, Type Checking
W Nov 29 Type Inference Type inference Optional: Efficient Type Inference
Nov.30/Dec.1 Precept 10: Exam Prep
Parallelism and Concurrency
M Dec 4 Parallel Collections Parallel Sequences Parallel Sequences, Optional Reading: MapReduce; NESL
Tu Dec 5 Assign 6 Due
W Dec 6 Parallel Collections II Parallel Prefix Scan; Assignment 7
Dec 8-9 Precept 11: Parallel map/reduce
Th Dec 14 Assign 7 Due
Dec 20 Final Exam 7:30pm-10:30pm, in Jadwin Hall A09