CSC324 Programming Languages

Fall 2019

Course Notes


The midterm take place October 23rd, during the first hour of lecture, in the usual lecture room. You must attend the lecture section in which you are enrolled.

The midterm covers the first five weeks of the course: The midterm covers both Haskell and Racket. It may include material from lectures 1-5, worksheets, labs 1-5, exercises 1-4, and assignment 1.


  • Length: 50 minutes
  • Written on paper. No computers, calculators, notes, etc.
  • Closed book
  • An aid sheet will be provided to you as part of the midterm. Here is a Sample Aid Sheet we may make minor modifications until closer to the midterm date. (I will announce in class when no more modifications will be made.)

Midterm Topics

You may be asked to do any of the following in the midterm:

  • Explain what functional programming means
  • Write recursive functions in Racket
  • Predict the behaviour of recursive functions in Racket or Haskell
  • Identify tail recursion and write tail-recursive functions
  • Use pattern matching in Racket and Haskell to simplify the way functions are written
  • Explain what currying means, and the behaviour of function currying in Haskell
  • Explain the difference between Eager vs. Lazy Evaluation, and the behaviour of programs in Racket and Haskell
  • Explain the difference between Strict vs. Non-Strict Evaluation, and the behaviour of programs in Racket and Haskell
  • Explain how closures are built, and build environments (as in the exercises)
  • Explain the difference between Lexical vs Dynamic scoping
  • Expand macros
  • Write new macros to solve problems
  • Expand the my-class macro from Lecture
  • Implement parts of an interpreter (like in the exercises)
  • Explain the various terminology defined in class

Old Midterms

A usual, course coverage changes from term to term: there may be materials covered in the past that wasn't covered this term. Likewise, there may be materials that we covered that wasn't covered in previous terms.