Week | Topic | Handouts |
3/1-7/1 |
- Introduction and administrative details
- Abstract models of computation and architectural realities
- Functional programming, the model and lambda calculus
- Renaming, variable capture, substitution
|
7/1 |
10/1-14/1 |
- Alpha, beta and eta transformations
- Representation games: boolean, pair, Church numerals
- Normal order and applicative order reductions
- Church-Rosser property
- Implementing recursion with lambda
|
10/1, 13/1 |
17/1-21/1 |
- Recursion and the Y-combinator
- Getting familiar with Scheme and FL/FLK syntax
- Structured operational semantics
- Introduction to denotational semantics
|
14/1 Hw1 |
31/1-4/2 |
- Denotational semantics for FLK and FL
- Modeling the environment
- Mutation and modeling the store
|
3/2 |
7/2-11/2 |
- Closures and static scope
- Dynamic scope
- Parameter passing
|
|
14/2-18/2 |
- Pass by reference
- Modules for non-hierarchical scoping
- Midterm review
|
Review |
25/2 |
|
Solutions |
28/2-3/3 (RKJ) |
- Object oriented programming
- Classes, methods, public, private, protected
- Subclasses and inheritance
- Polymorphism and overloading?
|
|
9/3-10/3 |
- Implementing OO languages using functional paradigm
- Tail recursion
- Control flow
- Continuation passing style
|
Hw2+Lab |
16/3-24/3 |
- Continuation-passing interpreters
- Standard semantics
- Non-local control transfer
- Exception handling
|
Hw3+Lab |
28/3-31/3 |
- Axiomatic semantics
- Reasoning about imperative programs
- Pre-and-post semantics
- Weakest precondition
|
|
6/4-7/4 |
- Complete axiomatic semantics for while-loops
- Types, primitive types, records, arrays, unions
- Type algebra, type checking and inferencing
|
|
13/4-14/4 |
- Logic programming
- Unification and resolution
- Applications to type inferencing and axiomatic semantics
|
|
13/4-14/4 |
|
Solutions |