CSE341: Programming Languages

Spring 2008

Course Information

Academic-Integrity Policy
Challenge-Problem Policy
Course Email List (mandatory)

Give Anonymous Feedback

Course Staff

Instructor: Dan Grossman, , Allen Center 556
   Office hours: Monday 10:30-11:30, Tuesday 2:00-3:00, and by appointment, Allen Center Room 556
TA: Matthew Kehrt, (first initial + last name) {at} cs.washington.edu
   Office hours: Wednesday 1:00-2:00, Friday 2:00-3:00, Allen Center Room 220
TA: Jeff Prouty, (first initial + last name) {at} cs.washington.edu, AIM: CSEJeff,
   Office hours: Tuesday 12:00-1:00, Thursday 12:30-1:30, Allen Center Room 002 (basement lab)


Turn-in page

Homework 1, due Thursday 10 April, 8:00AM
Homework 2, due Friday 18 April, 8:00AM   provided code
Homework 3, due Monday 28 April, 8:00AM   provided code
Homework 4, due Friday 9 May, 8:00AM   provided code
     Sample images:   Dan   Matthew   Jeff   George   Martha   Guy   Curry
Homework 5, due Tuesday 20 May, 8:00AM   provided code
Homework 6, due Wednesday 28 May, 8:00AM   provided code   example output
Homework 7, due Friday 6 June, 8:00AM   example output


Our final:   unsolved   solved
Sample final:   Wi08 unsolved   Wi08 solved
Our midterm:   unsolved   solved
Sample midterms:   Wi08 unsolved   Wi08 solved   Fa04 unsolved   Fa04 solved   Sp04 unsolved   Sp04 solved

Class Materials

1. Mar 31: Course mechanics, ML variable bindings   slides   code   summary
2. Apr 2: Functions, pairs, lists   slides   code   summary
3. Apr 4: Lack of mutation, let bindings, options   slides   code   summary
4. Apr 7: Each-of vs. one-of types, records, datatypes, case expressions   slides   code   summary
5. Apr 9: Pattern matching, one-argument functions; tail recursion, accumulators   slides   code   summary
Tail recursion got moved to Friday
6. Apr 11: Deep pattern-matching, course motivation   slides   code   summary   links
Course motivation got moved to Monday
7. Apr 14: Functions taking/returning functions   slides   code   summary
8. Apr 16: Function closures   slides   code   summary
9. Apr 18: Function-closure idioms   slides   code   summary
10. Apr 21: Higher-Order Functions Wrapup; Type inference; Namespace management   slides   code   summary
Namespace management got moved to Wednesday
11. Apr 23: Modules; Abstract Types   slides   code   summary
12. Apr 25: Parametric polymorphism; Equivalence   slides   summary
13. Apr 28: Introduction to Scheme   slides   code   summary
X. Apr 30: Midterm
14. May 2: Thunks, Streams, Memoization   slides   code   summary
Memoization got moved to Monday
15. May 5: Macros   slides   code   summary
16. May 7: Quoting, eval, apply   notes   code   mini-exercises
17. May 9: Define-struct; implementing higher-order functions   slides   code   summary
18. May 12: Static vs. dynamic typing   slides   summary
19. May 14: DrScheme modules; abstraction with dynamic types; function equvalences   slides   code   summary
20. May 16: Introduction to Ruby   slides   code   summary
21. May 19: Duck Typing; Blocks, Procs, and Iterators; Inheritance and Overriding   slides   code   summary
22. May 21: Late-binding: OO's essence, as a Scheme pattern   slides   code   summary
23. May 23: Multiple Inheritance, Interfaces, Mixins   slides   code   summary
X. May 26: University Holiday
24. May 28: Static typing for objects; OO subtyping   slides   summary
25. May 30: Named types; Parametric polymorphism vs. subtyping; bounded polymorphism   slides   code   summary
26. Jun 2: OO vs. functional extensibility   slides   ML   Java   summary
27. Jun 4: Garbage collection   slides
28. Jun 6: Wrap-up   slides

Section Materials

1. Apr 3: Lists, pairs, andalso, orelse, shadowing   code
2. Apr 10: Type synonyms, type variables, equality types, exceptions   code
3. Apr 17: First class functions, more tail recursion, fold   code
4. Apr 24: Modules, mutual recursion   code
5. May 1: Scheme, forms of let, cond, the truth behind cons, assoc   code
6. May 8: define-struct, defining and evaluating abstract syntax trees, macros on ASTs   code
7. May 15: Homework 5, let/cc   code
8. May 22: Arrays, hashes, exploratory programming   code
9. May 29: Subtyping for objects   code
10. June 5: Review for final exam

Textbooks and Online Resources

"Required": Jeffrey D. Ullman. Elements of ML Programming, ML'97 Edition. 1998.
Check the errata page to avoid bugs.
Approximately: Chapters 2, 3.1-3.4, 5.1-5.5 (skip 5.2.5, 5.3.4, 5.4.4), 6.1-6.2, 7.1, 8.2, 8.5.5 overlap with the course material.

"Optional": Dave Thomas. Programming with Ruby. 2005.
Check the errata page to avoid bugs.
Overlap with the course material is very roughly chapters 1-9 (or chapters 1-8 of the first edition), but not ranges, regular expressions, and several other small topics.

SML resources (none of which should be necessary):
  www.smlnj.org (links to many things, including the next three resources)
  user's guide
  standard-library documentation
  tutorials, books, and documentation

Scheme resources:
  R5RS (the standard)
  How to Design Programs (with links to the DrScheme web page)
  Structure and Interpretation of Computer Programs
  Programming Languages: Application and Interpretation

Ruby resources:
  List compiled by Stuart Reges for Fall 2007's CSE341


The CSE undergraduate labs have all the software you need for the course. If you would like to install software on your own computers, these links may help you. They contain more knowledge than the course staff has, so our ability to help further is limited.

emacs for Windows
SML NJ (use version 110.65)


Lecture: MWF 9:30-10:20, building EEB room 037
Section AA: Th 8:30-9:20, building MGH, room 248
Section AB: Th 9:30-10:20, building MEB, room 242
Final Exam: Wednesday June 11, 8:30-10:20, building EEB room 037


Homework 0, "due" April 3, 8:00AM (worth 0 points)
Getting started with Linux and emacs
Guidelines for using ML in emacs