CSC324 Programming Languages

Fall 2019

Course Notes

Course Description

Welcome to CSC324! In this course, you'll learn about programming paradigms that are quite different from the imperative approach you've seen in other courses. We'll study Racket and Haskell, two functional programming languages, and compare and contrast these languages with languages with which you're already familiar (Python and Java). In addition, we will be defining our own programming languages and programming language features. Why? We want to help you go beyond any particular programming language, and understand core conceptual differences between languages. We think this will make you a better programmer.

Syllabus for: LEC0101 LEC0102

All announcements will be made on Quercus.

Course Contact:

Instructor: Lisa Zhang
Email: lczhang [at] cs [dot] toronto [dot] edu
Please include "CSC324" in your email subject.
Office hours:
Lisa: Mondays 12pm-2pm, DH3078 and by appointment
Hassan: Tuesdays 1:30pm-3pm, Room CC2110
There will be additional office hours near assignment deadlines and tests.

See the course teaching team page.

Course Notes

We will not be using a textbook for the course. Instead, we will use the CSC324 Coursepack written by Prof. David Liu from the St. George campus. We will follow the notes closely for the majority of the course, but our treatment of logic programming will differ. Additional notes will be posted online.

Tentative Schedule

This is the planned schedule for the term. The lecture content, labs, and homeworks are subject to change.

Lecture (Wednesday)Lab (Friday)Exercise/Assignment
(Due Tuesday)
Week 1September 11, 2019
  • Introduction
  • The Lambda Calculus

Just for fun
September 13, 2019
  • Lab 1
  • Installation Help
  • Introduction to Racket
Due September 17, 2019
Week 2September 18, 2019
  • Pattern Matching
  • Tail recursion
  • Higher-Order Functions
  • Currying

September 20, 2019Due September 24, 2019
Week 3September 25, 2019
  • Eager evaluation
  • Strict vs non-strict evaluation,
  • Closures, Environments, Lexical scoping

September 27, 2019 Due October 1, 2019
Week 4October 2, 2019
  • Functional Classes and Objects
  • Macros

  • Course Notes pg.57-76
  • Slides
  • Worksheet
  • All the code I wrote in class are in the slides.
October 4, 2019Due October 8, 2019
Week 5October 9, 2019
  • Object-Oriented Programming: self
  • Recursive Macros
  • Streams
  • Slides

  • Course Notes pg.77-86

Additional TA Office hours
  • Thursday Oct 10 2:30-4pm CC2110
  • Thursday Oct 10 5:30-7pm CC2110
October 11, 2019Due October 15, 2019Due October 17, 2019

Reading week, no class / tutorial

Week 6October 23, 2019
Midterm TA Office hours
  • Tuesday Oct 22 1:30pm-3pm CC2110
  • Tuesday Oct 22 5:30pm-7pm CC2110

October 25, 2019Due October 29, 2019
Week 7October 30, 2019
Just for fun
November 1, 2019
  • Lab 7: Midterm Takeup
  • Please attend the takeup session that you are interested in:
    • LEC0101 midterm in room DH2020
    • LEC0102 midterm in room DH2026
Due November 5, 2019
Week 8November 6, 2019
November 8, 2019Due November 12, 2019
Week 9November 13, 2019
  • Types & Type Systems
  • Haskell's Type System
  • Slides

  • Course Notes pg.109-124
November 15, 2019Due November 19, 2019
Week 10November 20, 2019
  • Type Classes
  • Ad hoc polymorphism
  • Time for exercise 10 and assignment 1
  • Slides (WIP)

  • Course Notes pg.124-130

Additional TA Office hours
  • Tuesday Nov 19, 5:30pm-7p CC2110 (James)
  • Thursday Nov 21, 4:30pm-6pm CC2110 (James)
November 22, 2019Due November 26, 2019
Week 11November 27, 2019
  • Functors
  • Failing Computations
  • Time for assignment 1

  • Course Notes pg.130-143

Additional TA Office hours
  • Tuesday Nov 26, 5:30pm-7p CC2110 (James)
  • Thursday Nov 28, 4:30pm-6pm CC2110 (James)
November 29, 2019
  • Lab 11
Due December 3, 2019

Note: The "WIP" means that I might update the instructions to improve its clarity, but the assignment itself will not change.

Week 12December 4, 2019
  • Maintaining States
  • Monads
  • Where to go from here?

  • Course Notes pg.146-150

Additional TA Office hours
  • Tuesday Dec 3, 5:30pm-7p CC2110 (James)

Final Examination Schedule