Lecture Topics

DateDescription
March 29 Overview & Racket intro
slides, demo transcript
March 31 Racket intro; Lists
Racket basics (notes), function defs, demo1 transcript, demo2 transcript
April 2 Lists and functions
code, diagrams
April 5 Lists, functions, let
code, diagrams
April 7 let, let*; tail recursion; function parameters; higher-order functions (map, filter)
code, Recursion patterns (notes)
April 9 tail recursion (cont), functions as parameters, map, filter
code
April 12 Higher-order functions; intro to environments and execution
code, diagrams
April 14 Closures and environments
code, diagrams: simple let, simple lambda, nested lambda
April 16 Closures and environments (trace)
code, diagrams: currying, tail recursion
April 19 Map environment example; Mutation in Racket
slides, notes, lazy.rkt code, map diagram
April 21 Thunks, eager vs lazy evaluation, promises (same code and notes as Monday)
April 23 Streams and memos (concl.)
fib3 diagram
April 26 Racket structs; interpreters
slides, code
April 28 Interpreters, MUPL/hw5
April 30 interpreters (concl.), MUPL/hw5
mupl demo
May 3 More MUPL; Ruby intro
slides, code: silly.rb, Rat.rb
May 5 Ruby intro (concl.)
terminal output
May 7 Ruby containers, blocks, and procs
slides, terminal output
May 10 Ruby duck typing, inheritance, mixins, and modules
slides; code: Points.rb inherit.rb
May 12 Parsers, scanners, grammars, and derivations
slides
May 14 Regular expressions and scanners
May 17 Scanners (concl.)
DFA examples
May 19 Grammars and parsing
slides
May 21 Grammars, ambiguity
May 24 LL grammars and top-down parsing; grammar hacking
slides
May 26 Memory management, garbage collection
slides, diagrams: ref counting, cycles
May 28 Memory management (concl.)
June 2 Java implementation
slides, sample code
June 4 JavaScript and Dynamic Languages; Course wrapup
slides: dynamic, wrapup