EECS 321: Programming Languages

LectureTech LR5; Tuesdays and Thursdays 11:00—12:20

TextProgramming Languages: Application and Interpretation (First Edition)
by Shriram Krishnamurthi

Essentials of Programming Languages
by Friedman and Wand

PiazzaClass (should link to EECS 321, Spring 2018)
Sign up

SoftwareHandin Status

quick-ref.rkt a quick reference to things Racket; open in DrRacket

T Lab, Tech F252
Version 6.12 of Racket is installed in /home/software/racket/bin/drracket on the linux side of the t-lab machines.

Vincent St-Amour
Office Hours: Thursdays 4-5 or by appointment, Ford 3.333

Spencer Florence
Office Hours: Mondays 11-12 and Wednesdays 3-4, Wilkinson lab

Meg Grasse
Office Hours: Mondays and Wednesdays 3-5, Wilkinson lab

Danqi Liao
Office Hours: Wednesdays and Fridays 9-11, Wilkinson lab

Week #DateTopicReadings
1Thursday, April 5th, 2018Introduction
lecture00.pdf lecture01.pdf
PLAI §1, §2
2Due: Noon on Monday, April 9th, 2018HW 1: Setup and Finger Exercises
2Tuesday, April 10th, 2018Free, bound, and binding identifiers
2Thursday, April 12th, 2018Functions and Parsing
2Due: Noon on Friday, April 13th, 2018HW 2: Free, bound, and binding identifiers
3Tuesday, April 17th, 2018Deferred Substitution
3Thursday, April 19th, 2018Random testing
3Due: Noon on Friday, April 20th, 2018HW 3: Multi-arity functions
4Tuesday, April 24th, 2018Higher-order functions
4Thursday, April 26th, 2018Higher-order functions, Recursion
lecture06.pdf (cont'd) lecture07.pdf
PLAI §6, §9
4Due: Noon on Friday, April 27th, 2018HW 4: Deferred Substitution, if0, neg?, and mult
5Tuesday, May 1st, 2018Recursion via mutation, State
lecture08.pdf lecture09.pdf
PLAI §10
5Thursday, May 3rd, 2018State
lecture09.pdf (cont'd)
PLAI §12, §13
5Due: Noon on Friday, May 4th, 2018HW 5: Functions do more than you thought: natural numbers
6Tuesday, May 8th, 2018Garbage Collection
PLAI §21
6Thursday, May 10th, 2018Garbage Collection
PLAI §21
6No Homework on Friday, May 11th, 2018 
7Tuesday, May 15th, 2018Garbage Collection
lecture11.pdf (cont'd)
7Thursday, May 17th, 2018Garbage Collection, Types
lecture11.pdf (cont'd) lecture12.pdf
7Due: Noon on Friday, May 18th, 2018HW 6: State
8Tuesday, May 22nd, 2018Types
PLAI §24, §25
8Thursday, May 24th, 2018Types
PLAI §28
8No Homework on Friday, May 25th, 2018 
9Tuesday, May 29th, 2018Types
PLAI §26
9Thursday, May 31st, 2018Types
PLAI §30
9Due: Noon on Friday, June 1st, 2018HW 7: Garbage Collection
10Tuesday, June 5th, 2018Multithreading via Continuations
10Thursday, June 7th, 2018Generational GC & Cheney on the MTA
10Due: Noon on Friday, June 8th, 2018HW 8: Types
11Due: Noon on Wednesday, June 13th, 2018HW Ω: Threads via Continuations


Your homework each week will be graded automatically and you will receive either a check+ (A), check (B), check- (C), or 0 (F).

Any homework assignment may be handed in after the due date, but with ceiling on the score. To accept the homework, the handin server will have separate (logical) assignments, named hw1-second-try, hw2-second-try, etc. These homeworks will also be automatically graded (of course, strange results from the auto-grading system will be investigated upon request). When your final grade is computed, the higher of the original grade and the -second-try grade will be used, except that if the -second-try grade is a check+ then it is treated as a check for this purpose. In other words, your second try cannot raise your grade if the first try was already a check.

The last time second-try assignments will be accepted is Wednesday of finals week (June 13th), 5pm.

When computing your final grade, a check+ is treated like a 9, a check is treated like an 7, a check- is treated like 6, and a 0 is treated like a 0. The numbers are then averaged and this function is used to map them into number grades:

(define (numeric-grade->letter-grade number)
   ((<= 8.3 number 9) 'A)
   ((<= 7.8 number 8.3) 'A-)
   ((<= 7.4 number 7.8) 'B+)
   ((<= 7.0 number 7.4) 'B)
   ((<= 6.4 number 7.0) 'B-)
   ((<= 6.0 number 6.4) 'C)
   ((<= 5.0 number 6.0) 'C-)
   ((<= 4 number 5) 'D)
   ((<= 3 number 4) 'D-)
   ((<= number 3) 'F)))


Collaboration is a really good thing and we encourage it. On the other hand, cheating is a very serious offense, which carries serious consequences. It's OK to meet with colleagues, form study groups, discuss assignments with them, or compare alternative approaches. But it is never ok to share code or homework solutions, or even to see each other's code or solutions. What you turn in must be your own work. Copying (or even studying) code, solutions, etc., from anywhere (e.g., other people, web, GitHub) is strictly prohibited. Be aware that we use the (highly effective) MOSS software similarity detection system. If you discuss your work with another group, please list their names in your hand-in.

It is also forbidden to share, post, or otherwise publicise your solutions. This even extends after the quarter ends. No matter how proud you are of them, no posting your solutions to GitHub; doing so is an invitation to plagiarism.

It is the responsibility of every student in this class to be familiar with and to adhere to the Academic Integrity Policies of Northwestern University and the McCormick School of Engineering. The policies can be found here.

Any suspicion of violation of these policies will be reported immediately to the Associate Dean for Undergraduate Studies. If you are in doubt whether your actions constitute a violation of the above policies, ask the instructor.