CSC324 Programming Languages

Fall 2019

Home
MarkUs
Piazza
Software
Course Notes
Homework
Midterm
Team

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

Materials
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

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

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

Materials
  • 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 (WIP)

Materials
  • 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 (1 hour)
  • Continuations

Materials
  • Notes to be posted
October 25, 2019Due October 29, 2019
  • Exercise 6
Week 7October 30, 2019
  • Continuations
  • Shift/Reset

Materials
  • Notes to be posted
November 1, 2019
  • Lab 7
Due November 5, 2019
  • Exercise 7
Week 8November 6, 2019
  • The -< operator
  • Logic Programming

Materials
  • Notes to be posted
November 8, 2019
  • Lab 8
Due November 12, 2019
  • Exercise 8
Week 9November 13, 2019
  • Types & Type Systems
  • Haskell's Type System

Materials
  • Course Notes pg.109-124
November 15, 2019
  • Lab 9
Due November 19, 2019
  • Exercise 9
Week 10November 20, 2019
  • Type Classes
  • Ad hoc polymorphism

Materials
  • Course Notes pg.124-130
November 22, 2019
  • Lab 10
Due November 26, 2019
  • Exercise 10
Week 11November 27, 2019
  • Failing Computations
  • Maintaining States

Materials
  • Course Notes pg.130-143
November 29, 2019
  • Lab 11
Due December 3, 2019
  • Assignment 2
Week 12December 4, 2019
  • Monads
  • Where to go from here?

Materials
  • Course Notes pg.146-150

Final Examination Schedule