• Handouts
January 21. Introduction and overview.
Reading: Krishnamurthi, part I (pages 1-9).January 23. Modeling languages.
January 25. Lexical analysis and parsing.
January 28. Backus-Naur form.
Reading: Krishnamurthi, chapters 2 and 3 (pages 13-26).January 30. Evaluation by substitution.
Reading: Krishnamurthi, chapter 4 (pages 27-32).February 1. Functions.
Reading: Krishnamurthi, chapter 5 (pages 33-39).February 4. Deferring substitution.
Reading: Krishnamurthi, chapter 6 (pages 41-55).February 6. First-class functions.
Reading: Krishnamurthi, chapter 7 (pages 59-72).February 8. Programming with laziness.
Reading: Krishnamurthi, chapter 8 (pages 73-86).February 11. Implementing laziness.
February 13. Monads.
Reading: Krishnamurthi, chapters 9 and 10 (pages 89-102).February 15. Recursion.
Reading: Krishnamurthi, chapter 11 (pages 105-114).February 18. Representations.
Reading: Krishnamurthi, chapters 12 and 13 (pages 117-132).February 20. Mutation.
Reading: Krishnamurthi, chapter 14 (pages 133-144).February 22. Variables.
Reading: Krishnamurthi, chapters 15 and 16 (pages 147-167).February 25. Continuations and the structure of Web programs.
Reading: Krishnamurthi, chapter 17 (pages 157-167).February 27. Transformations.
Reading: Krishnamurthi, chapter 18 (pages 169-176).February 29. Conversion to continuation-passing style.
Reading: Krishnamurthi, chapter 19 (pages 177-192).March 3. Programming with continuations.
Reading: Krishnamurthi, chapter 20 (pages 193-205).March 5. Implementing continuations.
Reading: Griswold and Griswold, The Icon programming language, chapters 1 and 2 (pages 1-33).March 7. Generators in Icon.
Reading: Krishnamurthi, chapter 21 (pages 209-213).March 10. Memory management.
Reading: Krishnamurthi, chapter 22 (pages 217-229).March 12. Shrinking the language.
March 14. (pause for breath)
March 31. The lambda-calculus.
April 2. Combinators.
Reading: Krishnamurthi, chapter 23 (pages 231-233).April 4. Semantics.
Reading: Krishnamurthi, chapters 24 and 25 (pages 237-248).April 7 and 9. Type systems.
Reading: Krishnamurthi, chapter 26 (pages 249-254).April 11. Types and control structures.
Reading: Krishnamurthi, chapter 27 (pages 255-259).April 14. Types and recursive data structures.
Reading: Krishnamurthi, chapter 28 (pages 261-264).April 16. Type soundness and type safety.
Reading: Krishnamurthi, chapter 29 (pages 265-271).April 18. Polymorphism.
Reading: Krishnamurthi, chapter 30 (pages 273-283).April 21. Type inference.
Reading: Krishnamurthi, chapter 31 (pages 285-290).April 23. Implicit polymorphism.
Reading: Krishnamurthi, chapters 32 and 33 (pages 293-305).April 25. Logic programming.
April 30. A Prolog program for type inference.
Reading: Krishnamurthi, chapter 34 (pages 307-311).May 2. Implementing logic programming.
Reading: Krishnamurthi, chapters 36 and 37 (pages 319-348).May 5. Macros.
Reading: Krishnamurthi, chapters 38 and 39 (pages 351-355).May 7. Review and evaluation.
May 9. Guy R. Steele, "Growing a language."
May 16, 9 a.m. Final examination.