Caml
Power
Power
Schedule
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, hello.ml, sum.ml  Functional Basics, Type Checking, Optional: RWO pp 110  
Sep 78  Precept 1: OCaml Intro  precept1.zip ticket.ml .merlin fizzbuzz.ml (fizzbuzz solution) exercise1.ml  
M Sep 11  Simple Immutable Data: Variables, Tuples, Options  Let, Functions, Tuples  Typedirected 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 1415  Precept 2: Lists, Options, Polymorphism  precept2.zip precept2_solutions.zip  
M Sep 18  PolyHO: Polymorphism and HigherOrder Programming  C rant, map/reduce, Poly HO!  Polymorphism and Higherorder Programming  
Tu Sep 19  Assign 2 Due  
W Sep 20  More Data!  Datatypes, gml.ml  Optional: RWO Chapter 6  
Sep 2122  Precept 3: Assignment 3, Map, Fold and Datatypes  precept3.zip; exercise3_sol.ml  
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: eval0.ml; with recursive functions: eval3.ml  
Sep 2829  Precept 4: Assignment 4 and More About Closures  precept4.zip; precept4_sol.zip 

M Oct 2  How OCaml uses memory  Space model (and pruning closures); simple interpreter code: eval0.ml; with recursive functions: eval3.ml  
W Oct 4  Proving Programs Correct  Simple proofs, Induction for naturals, Induction for lists  Equational Reasoning  
Oct 56  Precept 5: Mutually Recursive Types, Equational Reasoning  theorems.ml; exercise4.ml (#4) (Sample solution, with proofs); exercise5.ml (solution) 

M Oct 9  More Correctness Proofs  Induction for datatypes, Proofs about programming languages  Equational reasoning about data types
Optional Reading: OddOrder Theorem; FourColor Theorem 

Tu Oct 10  Assign 4 Due  
W Oct 12  Generalizing your Induction Hypothesis  Generalized induction hypotheses; OCaml as compiled  
Oct 1213  Precept 6: Tail Recursion and More Equational Reasoning  
Oct 1620  Fall break  
Modularity  
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 23  Precept 8: Modules  precept8.zip ; precept8_sol.zip  
M Nov 6  Module Equivalence  Module Equivalence, Mechanized proofs  
Mutation & Laziness  
W Nov 8  Mutation  Mutable References  Optional: RWO Chapter 8  
Nov 910  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 1617  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 89  Precept 11: Parallel map/reduce  precept11.zip  
Th Dec 14  Assign 7 Due  
Dec 20  Final Exam 7:30pm10:30pm, in Jadwin Hall A09 