- Wednesday, 9/7
- Course intro; recursion; an imperative core; unit-testing; abstract syntax and environments
*Read:*- Ramsey, Preface and Chapter 1 upto but not including Section 1.2
- Paul Graham, Beating the Averages
- Tips for COMP 105 students

- Monday, 9/12
- Inference rules and evaluation; proofs and metatheory

Question for the day:*How can we define the**meaning*of a program?*Read: Ramsey, Chapter 1* - Wednesday, 9/14
- Semantics and metatheory

Question for the day:*How do I prove a fact that is true of**any*possible program?

Assignment for impcore: Introduction; imperative core; unit-testing; ASTs and environments (also in PDF) due at 11:59 PM. - Monday, 9/19
- Scheme:
**Guest Lecture:**S-expressions,`cons`, and its algebraic laws; Programming with recursion and lists using case analysis

Question for the day:*In language design, what are the connections between data and control?**Read: Ramsey, Chapter 2, Sections 2.1 through 2.6 (plus syntax and semantics in Sections 2.11 and 2.13)* - Wednesday, 9/21
- Scheme:
**Guest Lecture:**The cost of`cons`,`append`and`reverse`, the method of accumulating parameters

Question for the day:*How do you write a recursive function that consumes a list?*

Assignment for opsem: Operational semantics; metatheory (also in PDF) due at 11:59 PM. - Monday, 9/26
- The
`let`family, functions as values, introduction to`lambda`, using`lambda`to create escaping functions*Read: Ramsey, Chapter 2.* - Wednesday, 9/28
**Jared Chandler**Higher-order functions on lists and Tail Calls

Assignment for scheme: Scheme (also in PDF) due at 11:59 PM.- Monday, 10/3
- Continuations
- Wednesday, 10/5
- Operational semantics of uScheme
- Monday, 10/10
**Indigenous Peoples' Day. No class.**- Wednesday, 10/12
- ML: Introduction to ML

Assignment for hofs: Scheme II: first-class and higher-order functions, continuation passing, semantics (also in PDF) due at 11:59 PM.*Read:*- Ullman, Chapters 1, 2, 3, 5, and 6. You can skip Section 5.7
- Ullman, Section 4.2.5 (for
`option`, not for`input1`) - The Supplement to Ullman
- Ramsey, Chapter 5
- Browse the Standard ML Basis Library for SML'97. Some of this material is summarized in Ullman, Chapter 9.

- Monday, 10/17
- ML: Algebraic data types; Case statements and pattern matching; Introduction and elimination; Exceptions
- Wednesday, 10/19
- Type systems and type checking

Question for the day:*Could you effectively use types to detect errors in Scheme programs?**Read: Ramsey, Chapter 6.* - Sunday, 10/23
*Not a class day, but Assignment for ml: ML (also in PDF) due at 11:59 PM.*- Monday, 10/24
- Interlude: Midterm Review

Question for the day:*How can type checking be made simple?***In-class course evaluations**at 10:00 AM - Wednesday, 10/26
**Midterm exam in class: Operational Semantics, Functional Programming, ML**- Monday, 10/31
- Polymorphic type checking
- Wednesday, 11/2
- Type-checking from a high level; Three environments

Question for the day:*What are the drawbacks of type checking?* - Monday, 11/7
- Inference: Type inference using constraints; Constraint solving and type inference

Question for the day:*Where does a new, unknown type come from in an ML program? When do two types have to be equal in an ML program?**Read: Ramsey, Chapter 7* - Wednesday, 11/9
- Inference: Generalization
- Saturday, 11/12
*Not a class day, but Assignment for typesys: Type systems (also in PDF) due at 11:59 PM.*- Monday, 11/14
- Inference: Type inference at let bindings
- Wednesday, 11/16
- Smalltalk: Inheritance
*Read: Ramsey, Chapter 11. Introductory sections: 11.1, 11.2. Key material for some parts of homework is in Sections 11.3 and 11.5. But you do not need to digest all of those sections. The remaining sections are there in case you find them useful. Section 11.4 contains an extended example, and section 11.6 answers all detailed questions about the semantics of the language.* - Monday, 11/21
- Smalltalk: Class hierarchies; The collection classes

Assignment for ml-inf: Inference (also in PDF) due at 11:59 PM. - Wednesday, 11/23
**Thanksgiving Break. No class.**- Monday, 11/28
- Standard ML: Introduction to modules
*Read:*- Ullman, Chapter 8, except section 8.5.3
- Tofte, Tips for Computer Sciences on Standard ML. This is more like a "quick reference card" than anything else.
- Ramsey, ML Module Mania (optional reading for cultural enrichment, i.e., what is all this good for?)

- Wednesday, 11/30
- Standard ML: Structures, signatures, functors
- Sunday, 12/4
*Not a class day, but Assignment for small: Smalltalk (also in PDF) due at 11:59 PM.*- Monday, 12/5
- Standard ML: Modules example: error-producing computations
- Wednesday, 12/7
- Programming with lambda calculus. What's a calculus? Free variables, Beta reduction, Substitution, and Small-step Semantics; Normal forms, Reduction strategies, Fixed points, Recursion equations, and the Y combinator
*Read:*- Wikipedia pages on Lambda calculus and Church encoding (we use the "list-as-fold" encoding for lists).
- Raul Rojas, A Tutorial Introduction to the Lambda Calculus
- Prakash Panangaden, Notes on the Lambda Calculus
- Henk Barendregt and Erik Barendsen, Introduction to Lambda Calculus, chapters 1 and 2
- Other resources from the Math Stack Exchange
- That About Wraps it Up by Bruce McAdam (programming with fixed-point combinators)

- Sunday, 12/11
*Not a class day, but Assignment for sml: Standard ML (also in PDF) due at 11:59 PM.*- Monday, 12/12
- Programming-languages retrospective
- Thursday, 12/15
**Final exam: 8:30 AM to 10:30 AM. Braker 01.**