January 19. Introduction and overview.
Makeup exercises for January 19: Additional exercises
A.1 and
A.2.
Reading: Friedman and Wand, unnumbered opening section of chapter 1 and
sections 1.1 through 1.3 (pages 1-25).
January 21. Recursively specified data; contracts.
Makeup exercises for January 21: Friedman and Wand, exercises 1.2, 1.5, and 1.13.
Reading: Friedman and Wand, section 1.4 (pages 26-30).
January 23. Mapping and folding; higher-order procedures.
Makeup exercises for January 23: Friedman and Wand, exercises 1.18, 1.21, and 1.27.
Reading: Friedman and Wand, sections 2.1 and 2.2 (pages 31-42).
January 26. Data abstraction.
Makeup exercises for January 26: Friedman and Wand, exercises 2.2, 2.5, and 2.11.
Reading: Friedman and Wand, sections 2.3 and 2.4 (pages 42-51).
January 28. Tuples, unions, and variant-record datatypes; define-datatype and cases.
Makeup exercises for January 28: Friedman and Wand, exercises 2.15, 2.15, and 2.21.
Reading: Friedman and Wand, section 2.5 (pages 51-55).
January 30. Concrete and abstract syntax; syntax trees.
Makeup exercises for January 30: Friedman and Wand, exercises 2.27, 2.28, and 2.30.
February 2. Backus-Naur form; extensions; scanning and parsing.
Makeup exercises for February 2: Additional exercises
A.3 and
A.4.
Reading: Friedman and Wand, unnumbered opening section of chapter 3 and
section 3.1 (pages 57-59).
February 4. Evaluating arithmetic expressions.
Makeup exercises for February 4: Additional exercises
A.7 and
A.8.
Reading: Friedman and Wand, section 3.2 (pages 60-74).
February 6. Environments.
Makeup exercises for February 6: Friedman and Wand, exercises 3.6 and 3.11.
Reading: Friedman and Wand, section 3.3 (pages 74-82).
February 9. Procedures and closures.
Makeup exercises for February 9: Friedman and Wand, exercises 3.20 and 3.21.
Reading: Friedman and Wand, section 3.4 (pages 82-87).
February 11. Recursive procedures.
Makeup exercises for February 11: Friedman and Wand, exercises 3.30 and 3.35.
Reading: Friedman and Wand, section 3.5 (pages 87-91).
February 13. Recursive procedures; scope.
Makeup exercises for February 13: Friedman and Wand, exercises 3.35 and 3.36.
Reading: Friedman and Wand, sections 3.6 and 3.7 (pages 91-101).
February 16. Lexical addressing.
Makeup exercises for February 16: Friedman and Wand, exercise 3.41, and additional
exercise
A.10.
February 18. The λ-calculus.
Makeup exercises for February 18: Additional exercises
A.11,
A.12, and
A.13.
February 20. Data modeling in the λ-calculus.
Makeup exercises for February 20: Additional exercises
A.16, and
A.17.
Reading: Friedman and Wand, sections 4.1 and 4.2 (pages 103-113).
February 23 and 25. State and assignment.
Makeup exercises for February 23: Friedman and Wand, exercises 4.1, 4.6, and 4.9.
Makeup exercises for February 25: Friedman and Wand, exercises 4.4, 4.7, and
additional exercise
A.19.
Reading: Friedman and Wand, section 4.3 (pages 113-124).
February 27. Transparent dereferencing; lvalues and rvalues.
Makeup exercises for February 27: Friedman and Wand, exercises 4.14 and 4.22.
Reading: Friedman and Wand, section 4.4 (pages 124-130).
March 2. Storage structures.
Makeup exercises for March 2: Friedman and Wand, exercises 4.28 and 4.29.
Reading: Friedman and Wand, section 4.5 (pages 130-138).
March 4. Parameter passing; eager and lazy evaluation.
Makeup exercises for March 4: Friedman and Wand, exercises 4.34 and 4.39.
Reading: Friedman and Wand, unnumbered opening section of chapter 5 and
section 5.1 (pages 139-155).
March 6. Continuations.
Makeup exercises for March 6: Friedman and Wand, exercises 5.1 and 5.5.
Reading: Friedman and Wand, sections 5.2 and 5.3 (pages 155-171).
March 9. Interpreters written in imperative style.
Makeup exercises for March 9: Friedman and Wand, exercises 5.23, 5.26, and 5.29.
Reading: Friedman and Wand, section 5.4 (pages 171-178).
March 11. Exceptions.
Makeup exercises for March 11: Friedman and Wand, exercises 5.38 and 5.42.
Reading: Friedman and Wand, section 5.5 (pages 179-191).
March 13. Threads and synchronization.
Makeup exercises for March 13: Friedman and Wand, exercises 5.45 and 5.48.
Reading: Friedman and Wand, unnumbered opening section of chapter 6 and
section 6.1 (pages 193-203).
March 30. Continuation-passing style.
Makeup exercises for March 30: Friedman and Wand, exercises 6.2 and 6.4.
Reading: Friedman and Wand, section 6.2 (pages 203-212).
April 1. The tail-call optimization.
Makeup exercises for April 1: Friedman and Wand, exercises 6.3 and 6.12.
Reading: Friedman and Wand, sections 6.3 and 6.4 (pages 212-232).
April 3. Compiling to continuation-passing style.
Makeup exercises for April 3: Friedman and Wand, exercises 6.13, 6.20, and 6.36.
April 6. Generators in Icon.
Makeup exercises for April 6: Additional exercises
A.20, and
A.21.
Reading: Friedman and Wand, unnumbered opening section of chapter 7 and
sections 7.1 and 7.2 (pages 139-155).
April 8. Typing rules.
Makeup exercises for April 8: Friedman and Wand, exercises 7.1 and 7.4.
Reading: Friedman and Wand, section 7.3 (pages 240-248).
April 10. Checking type declarations.
Makeup exercises for April 10: Friedman and Wand, exercises 7.6 and 7.10.
Reading: Friedman and Wand, section 7.4 (pages 248-274).
April 13. Type inference.
Makeup exercises for April 13: Friedman and Wand, exercises 7.12, 7.14, and 7.21.
April 15 (pause to catch up).
Makeup exercises for April 15: Friedman and Wand, exercises 7.23 and 7.26.
Reading: Friedman and Wand, unnumbered opening section of chapter 8 and
section 8.1 (pages 275-292).
April 17. Simple modules.
Makeup exercises for April 17: Friedman and Wand, exercises 8.1 and 8.2.
Reading: Friedman and Wand, section 8.2 (pages 292-311).
April 20. Opaque and transparent types.
Makeup exercises for April 20: Friedman and Wand, exercises 8.13 and 8.14.
Reading: Friedman and Wand, section 8.3 (pages 311-324).
April 22. Module procedures.
Makeup exercises for April 22: Friedman and Wand, exercises 8.19 and 8.24.
Reading: Friedman and Wand, unnumbered opening section of chapter 9 and
sections 9.1 and 9.2 (pages 325-334).
April 24. Objects, classes, and inheritance.
Makeup exercises for April 24: Friedman and Wand, exercises 9.1 and 9.2 (page 347).
Reading: Friedman and Wand, sections 9.3 and 9.4 (pages 334-352).
April 27. Implementing an object-oriented language.
Makeup exercises for April 27: Friedman and Wand, exercises 9.4 and 9.6.
Reading: Friedman and Wand, section 9.5 (pages 352-357).
April 29. Typing in object-oriented languages.
Makeup exercises for April 29: Friedman and Wand, exercises 9.30 and 9.31.
Reading: Friedman and Wand, section 9.6 (pages 358-371).
May 1. Type checking in object-oriented languages.
Makeup exercises for May 1: Friedman and Wand, exercise 9.40.
May 4. Logic programming.
Makeup exercises for May 4: Additional exercise
A.26.
May 6. (pause for breath).
May 8. Conclusions; student evaluations.
May 13, 9 a.m. Final examination.