This is a rough sketch of the quarter that is likely to change. We can accurately predict the past, but predicting the future is hard! In particular, all future assignment dates should be considered tentative and subject to change.
Note: Unit reading and video notes are optional and cover roughly the same material discussed in some combination of lecture, section, and other course materials. They can nonetheless serve as a useful resource if you are confused on a topic, though they should NOT be considered a sufficient substitute for attending class.
ML Variable Bindings; Semantics; Expressions
Emacs/SML Mode, Shadowing, SML Errors
Functions, Pairs, and Lists
Local Bindings; Options
More with Types; Syntactic Sugar
Records and Datatypes; Case Expressions
More Datatypes; Pattern Matching
Pattern Matching; Tail Recursion
Tail Recursion; Exceptions
First-Class Functions
Lexical Scope, Function Closures
Higher-order Functions
ML Modules
Currying; Modules
Type Inference
Equivalence
Introduction to Racket
Racket; Thunks
Thunks, Laziness, Streams, and Memoization
Streams; Macros
Structs; Datatype-Style Programming
Implementing Languages (Including Closures)
Legal ASTs; Implementing Languages
Arrays, Blocks, and Procs; Inheritance and Overriding
Ruby Arrays, Hashes, Blocks, and More
Dynamic Dispatch, Precisely and Manually, in Racket
OOP v. Functional Decomposition; Double Dispatch
Multiple Inheritance, Mixins, Interfaces, Abstract Methods
Double Dispatch, Mixins, and Visitors