Schedule of topics

Course links

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.