Lecture Notes

All notes from the class will be posted on this page, hopefully before the class itself.

May 15:

Overview, Scheme Intro

May 18:

Scheme intro, recursive functions & lists

May 22:

recursion, higher order functions and their types, reversal example (recursive), reversal example (iterative)

May 25:

Function Generalization, Types, grammars, and parsing

June 1:

Grammars, Abstract Syntax, A Parser for Language AE, Scheme Symbols, Parser Code

June 5:

A Simple Parser and Evaluator, Code, Additional Sample Code

June 8:

Identifiers and Substitution, Substituting Evaluator -- Buggy Version, Proper Substituting Evaluator

June 12:

Grammars, State Machine Diagrams, State Machines (code), Supporting Code

June 15:

First-Class Functions, Scheme Examples, FLANG Interpreter - Bad Call Evaluation, Proper FLANG Interpreter

June 19:

Extension of WAE operators to arbitrary arity (straightforward yet inefficient version), Version with more concise type definitions

June 22:

Anonymous Functions and Recursion, Functions as Data, Substitution Caches, Javascript Functions-as-Data Example, Javascript GUI Example, Scheme GUI Example

June 26:

Substitution Caches -- Lexical & Dynamic Scope, FLANG with dynamic scope

June 29:

Implementing Lexical Scope, Environments, FLANG with proper closures, Environments implemented by Scheme closures, Auxiliary code

July 3:

Explanations and comments about Assignment 5

July 13:

Syntactic, Meta, and Meta-Circular Evaluators, Scheme Meta-Circular Evaluator, Recursion

July 17:

Implementing Recursion, Recusive-FLANG Interpreter, TOY language interpreter, Auxiliary utilities (needed by toy.scm)

July 20:

Mutation, Side Effects, and the Store; Mutable Variables; Parameter Passing, Examples of Implementing Objects via Functions

July 24:

Finishing Up — Mutable Variables, Parameter Passing

July 31:

OO Modeling Example (Java) -- Rendering Shapes, Implementing Dynamic Dispatch and State Encapsulation (Scheme)

August 3:

Control, How C confuses the store with the stack, A more nefarious example, Java Exceptions example