Lecture + Section

See links below for each class meeting's slides, video, code, etc. Materials except videos are in a public Google Drive folder, which you can navigate to for easier bulk-download. Videos are in a different Google Drive folder, which is accessible only to course participants -- authenticate with your UW (not CSE) G Suite credentials. Alternately, videos are available on Canvas.

Lecture slides/code/topics do not always align perfectly with class periods -- class and videos may be ahead or behind.

Unit 1 : OCaml Functions, Tuples, Lists, and More

  • Mon, Mar 29 - Lecture 01 : Welcome! Intro to OCaml (slides, video, code)

  • Wed, Mar 31 - Lecture 02 : Syntax and Semantics: Expressions, Functions (slides, video, code)

  • Thu, Apr 1 - Section 01 : REPL, OCaml, Debugging (slides, video: AB (see Canvas for AA and AD), code)

  • Fri, Apr 2 - Lecture 03 : Tuples, Lists (slides, video, code)

  • Mon, Apr 5 - Lecture 04 : Let Expressions, Options, Benefits of No Mutation (slides, video, code)

Unit 2: Variants, Pattern Matching, Tail Recursion, and More

  • Wed, Apr 7 - Lecture 05 : Records, Variants, Match Expressions (slides, video, code)

  • Thu, Apr 8 - Section 02 : Type Synonyms, More General Types, Pattern Matching (slides, worksheet, code, see Canvas for videos)

  • Fri, Apr 9 - Lecture 06 : More Pattern-Matching (slides, video, code)

  • Mon, Apr 12 - Lecture 07 : Nested Patterns, Tail Recursion, Exceptions (slides, video, code)

Unit 3: First-Class Functions and Closures

  • Wed, Apr 14 - Lecture 08: First-Class Functions (slides, video, code)

  • Thu, Apr 15 - Section 03: Tail Recursion, Using Map and Filter, Returning Functions (slides: AA, AB, AD, code unsolved, code solved, see Canvas for videos)

  • Fri, Apr 16 - Lecture 09: Lexical Scope and Function Closures (slides, video, code)

  • Mon, Apr 19 - Lecture 10: Function-Closure Idioms (slides, video, code)

Note: Section 04, listed below, is split across Unit 3 and Unit 4. Also, in order to better set up Section 04, lecture/video on Apr 21, 23, and 26 were reordered as follows: On Apr 21, after finishing currying (Lecture 10), we move to OCaml Modules (Lecture 11). On Apr 23, we finish OCaml Modules (Lecture 11) and then return to Lecture 10, doing Callbacks via closures on Apr 23, and ADTs via closures on Apr 26.

Unit 4: ML Modules, Type Inference, and Equivalence

Midterm Quiz Review

Interlude: Course Motivation

  • Fri, Apr 30 - Lecture 14: Course Motivation (slides, video)

Unit 5: Racket Introduction, Delaying Evaluation, Macros

  • Mon, May 3 - Lecture 15: Racket Introduction (slides, video, code)

  • Wed, May 5 - Lecture 16: Variables, Scope, Pairs, Mutation (slides, video, code)

  • Thu, May 6 - Section 06: Mutable Pairs, When Expressions Evaluate, Memoization (slides, code, see Canvas for videos)

  • Fri, May 7 - Lecture 17: Thunks, Promises, Streams (slides, video, code)

  • Mon, May 10 - Lecture 18: Macros (slides, video, code)

Unit 6: Structs, Interpreters, Static vs. Dynamic Typing

Unit 7: Racket-Style Object-Oriented Programming

  • Wed, May 19 - Lecture 22: Introduction to Racket OOP (slides, video, code)

  • Thu, May 20 - Section 08: More Racket OOP: Scope, Augmentation (code, slides, solutions, see Canvas for videos)

  • Fri, May 21 - Lecture 23: Subclassing, Overriding, Dynamic Dispatch (slides, video, code)

  • Mon, May 24 - Lecture 24: Multiple Inheritance, Mixins, Interfaces, Abstract Methods (slides, video, code)

Unit 8: FP vs. OOP Program Decomposition, Subtyping, and More

  • Wed, May 26 - Lecture 25: FP vs. OOP Decomposition; Double Dispatch (slides, video, code)

  • Thu, May 27 - Section 09: Double Dispatch; The Visitor Pattern (slides, starter code, solved code, see Canvas for videos)

  • Fri, May 28 - Lecture 26: Subtyping (slides, video)

  • Wed, Jun 2 - Lecture 27: Subtyping for OOP, Generics vs. Subtyping (slides, video)

  • Thu, Jun 3 - Section 10: Final-Quiz Review (slides)

Course Wrap-Up and Some Bonus Code

  • Fri, Jun 4 - Lecture 28: Manual Dynamic Dispatch, Manual Closures, Course Victory Lap (slides, code, video)