Lecture + Section
See links below for each class meeting's slides, video, code, etc. and the corresponding reading notes for each unit. For easier bulk access, you can also go to:
For student-privacy reasons, videos are available only to students in the class.
Video links from our class meetings go directly to the Panopto recordings which are available only to class participants (UW credentials).
Any other provided videos will go to a Google Drive folder available only to class participants (UW Google Workspace credentials).
Lecture slides/code/topics do not always align perfectly with class periods -- class and videos may be ahead or behind, usually behind so you continue to the next video to complete a topic. Anything in the future might get edited or rearranged.
Unit 1 : OCaml Functions, Tuples, Lists, and More
Wed, Jan 4 - Lecture 01 : Welcome! Intro to OCaml (slides, video, code)
Thu, Jan 5 - Section 01 : REPL, OCaml, Debugging (AC-slides, AD-slides, code [both sections])
Fri, Jan 6 - Lecture 02 : Syntax and Semantics: Expressions, Functions (slides, video, code)
Mon, Jan 9 - Lecture 03 : Tuples, Lists (slides, video, code)
Wed, Jan 11 - Lecture 04 : Let Expressions, Options, Benefits of No Mutation (slides, video, code)
Unit 2: Variants, Pattern Matching, Tail Recursion, and More
Thu, Jan 12 - Section 02 : Type Synonyms, More General Types, Intro to Records/Variants (slides, worksheet, code)
Fri, Jan 13 - Lecture 05 : Records, Variants, Match Expressions (slides, video, code)
Wed, Jan 18 - Lecture 06 : More Pattern-Matching (slides, video, code)
Thu, Jan 19 - Section 03 : Pattern-Matching, Exceptions, Tail Recursion (slides, worksheet, code)
Fri, Jan 20 - Lecture 07 : Nested Patterns, Tail Recursion, Exceptions (slides, video, code)
Unit 3: First-Class Functions and Closures
Mon, Jan 23 - Lecture 08 : First-Class Functions (slides, video, code)
Wed, Jan 25 - Lecture 09 : Lexical Scope and Function Closures (slides, video, code)
Thu, Jan 26 - Section 04 : Map, Filter, Currying, Mutual Recursion (slides, worksheet, code: mutual recursion, tupled answers, curried answers)
Fri, Jan 27 - Lecture 10 : Function-Closure Idioms (slides, video, code)
The callback idiom is in start of the Mon, Jan 30 video
The ADT idiom is optional (but very cool! :-) ) and in this video from 2021
Unit 4: Modules, Type Inference, and Equivalence
Mon, Jan 30 - Lecture 11 : OCaml Modules (slides, video, code)
Wed, Feb 1 - Lecture 12 : Type Inference (slides, video, code)
Thu, Feb 2 - Lecture 13 [in the section slot] : [finish type inference], Equivalence (slides) and Modules Example (code, slides), (video for all of section: section-AC, section-AD)
[equivalence continues on Feb 3 (see below)]
Unit 5: Racket Introduction, Delaying Evaluation, Macros
Fri, Feb 3 - Lecture 14 : Racket Introduction (slides, video, code)
Mon, Feb 6 - Lecture 15 : Variables, Scope, Pairs, Mutation (slides, video, code)
[Wed Feb 8: midterm]
Thu, Feb 9 - Section 6 : Mutable Pairs, When Expressions Evaluate, Memoization (slides, code)
Fri, Feb 10 - Lecture 16 : Thunks, Promises, Streams (slides, video, code)
Mon, Feb 13 - Lecture 17 : Macros [mostly optional-but-encouraged] (slides, video, code)
We have made how-to-write-macros-in-Racket optional-but-encouraged in this short quarter, so all of the code and most of the slides are optional. This video extracted from a prior quarter presents this content.
Unit 6: Racket Structs, Implementing Programming Languages
Mon, Feb 13 - Lecture 18 : One-Of Types with Lists or Structs (slides, video, code)
Wed, Feb 15 - Lecture 19 : Implementing Programming Languages (slides, video, code)
Thu, Feb 16 - Section 7 : Interpreters, Quote/Eval (slides, worksheet, worksheet-solution, code)
[Lecture 19 continues on Feb 17 (see below)]
Unit 7: Racket-Style Object-Oriented Programming Languages
Readings (reading notes are not available for most of the unit but see the Racket Guide chapter for some of the relevant material):
Note: Each topic starts half-way-or-more through the video and continues for much of the next video
Fri, Feb 17 - Lecture 20 : Introduction to Racket OOP (slides, video, code)
Wed, Feb 22 - Lecture 21 : Subclassing, Overriding, Dynamic Dispatch (slides, video, code)
Thu, Feb 23 - Section 8 : More Racket OOP: Scope, Augmentation (slides, code, solutions)
Fri, Feb 24 [asynchronous video] - Lecture 22 : Multiple Inheritance, Mixins, Interfaces, Abstract Methods (slides, video, code)
Mon, Feb 27 - Mostly finishes Lecture 22, with last 10 minutes starting Lecture 23 (video)
Wed, Mar 1 - Lecture 23 : FP vs. OOP Decomposition; Double Dispatch (slides, video, code)
Thu, Mar 2 - Section 9: Double Dispatch, Visitor Pattern (slides, code)
Unit 8: Static vs. Dynamic Typing, Subtyping
Fri, Mar 3 - Lecture 24: Static vs. Dynamic Typing (slides, video, code)
Wed, Mar 8 - Lecture 26: Subtyping for OOP; Generics vs. Subtyping (slides, video)
Final-Exam Review
Thu, Mar 9 - Section 10: Final-Exam Review (slides, folder of old exams)