Overview: Why languages?
ML: Functions and Patterns
(Supplementary notes: functional programming, language semantics, exercises)
ML: Polymorphic types and higher-order functions
ML: Polymorphic type inference
ML: User-defined types and type synonyms
ML: Mutable and optional data
(Supplementary notes: Why side effects?;
lecture slide version)
Grammars, language specifications, and interpreters
Dynamic vs. static types
(Supplementary notes: uses of dynamic typing)
Scheme: Continuations and exceptions
Smalltalk: Classes and metaclasses
Object-oriented design and Smalltalk collections
(lecture slide version, with additional notes)
Exploratory programming with Squeak and Morphic
(lecture slide version [920KB PDF],
4 slides/page handout version [3.7MB PDF],
KPresenter sources)
Static typing in object-oriented languages
(lecture slide version [63KB PDF],
KPresenter sources)
Connections between OOP and FP: EML, MultiJava, and Pizza
Scripting, Ruby, and regular expression matching
The source files used in my interactive read-eval-print sessions during lecture are available in this directory. However, I strongly suggest you read the notes and type in the expressions yourself, instead of entering the provided code directly. The act of typing in code --- and thinking about it as you do so --- helps you learn. Even the act of making a typo, seeing the resulting error, and fixing it can be educational. I am providing this code primarily because I sometimes type things in lecture that aren't in the notes, and it may be useful to students to see them.
Figure sources: The xfig and eps versions of all the figures from these notes are in this directory. As an exception to the Creative Commons license governing the remainder of these materials, the figures in this directory are hereby released into the public domain.