CS 312 Schedule Spring 2008

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.).

Note: due dates of unreleased assignments are tentative.

Meeting Date

  Topic

Introduction to functional programming
Lec. 1 Jan. 22 Course overview and background on ML (slides) (PS1 issued)
Rec. 1 23 Introduction to SML syntax
Lec. 2 24 Functions, scope, and evaluation
Jan. 24 SML demo, 7–8pm, Upson B7
Rec. 2 28 Tuples, records, datatypes, and pattern matching
Lec. 3 29 Lists and other recursive datatypes
Rec. 3 30 Higher-order and anonymous functions, currying,
printing, side effects, and exceptions
Lec. 4 31 Polymorphism and parameterized types (PS1 due, PS2 issued)
Rec. 4 Feb. 4 Datatype pitfalls, polymorphism and lists
Lec. 5 5 Substitution model of evaluation
Rec. 5 6 Folding and tail recursion 
Writing and using specifications
Lec. 6 7 Specifications
Rec. 6 11 Functional examples, structures and signatures
Lec. 7 12 Modules and data abstractions
Rec. 7 13 Functional stacks and queues (PS2 due)
Lec. 8 14 Documenting implementations of data abstractions (PS3 issued)
Rec. 8 18 Dictionaries and association lists
Lec. 9 19 Representation invariants
Rec. 9 20 Set and map interfaces
Reasoning about correctness
Lec. 10 21 Testing
Rec. 10 25 More testing
Lec. 11 26 Logic for verification
Rec. 11 27 More inductive correctness proofs (PS3 due, PS4 issued)
Lec. 12 28 Predicate logic
Rec. 12 Mar. 3 Using predicate logic, induction
Lec. 13 4 Verification conditions
Rec. 13 5 Prelim I review
Lec. 14 6 Prelim I review (optional)
March 6 Preliminary Exam I, 7:30–9:00pm, Thurston 205
(Closed-book. Covers material through Recitation 12 and PS3.)
Rec. 14 10 Verification conditions, using specs to write recursive functions
Lec. 15 11 Modular verification
Rec. 15 12 Mutable data structures: refs and arrays
Lec. 16 13 Specifying imperative abstractions
March 15–23: Spring Break
Reasoning about performance
Rec. 16 24 Asymptotic complexity and binary search trees
Lec. 17 25 Recurrences
Rec. 17 26 Solving recurrences
Lec. 18 27 Substitution and master methods (PS4 due, PS5 issued)
Rec. 18 31 PS5 overview
Data structures and algorithms
Lec. 19 Apr. 1 Red-black trees
Rec. 19 2 Representing and traversing graphs, source code control
Lec. 20 3 Hash tables and amortized complexity
Rec. 20 7 Concurrency and monitors
Lec. 21 8 Amortized analysis, hash functions
Rec. 21 9 Amortized analysis examples
Lec. 22 10 Memoization (PS5 due, PS6 issued)
Rec. 22 14 Prelim II review 
Lec. 23 15 (No lecture)
April 15 Preliminary Exam II, 7:30–9:00pm, Phillips 219
(Closed-book. Covers though Lecture 21 and PS5.)
Rec. 23 16 PS6 overview
Below the SML abstraction
Lec. 24 17 Locality
Rec. 24 21 Garbage collection
Lec. 25 22 Splay trees
Rec. 25 23 B-trees
Programming paradigms
Lec. 26 24 Concurrency and message passing
Rec. 26 28 Lambda calculus
Lec. 27 29 Streams and other laziness
Rec. 27 30 Type inference
Lec. 28 May 1 Logic programming and pattern matching for JavaJMatch web site ] (PS6 due)
May 6 CS 312 Tournament, Upson B17, 7:30–9:30pm (pizza provided)
May 12 Final review, 2:30-4pm, Upson 109
May 13 Final Exam, 7-9:30pm, Phillips 203
(Open-book. Covers all course material.)