CIS352 — Spring 2025

Programming Languages: Theory and Practice

Week 1: Course Introduction and Autograder

Week 2: Racket Forms and Lists

Week 3: Recursion and Lambdas

Week 4: Tree-Shaped (Algebraic) Data

Week 5: Tail Calls and Foldl/r

Week 6: Foldl/r and Building Our First Interpreter

  • 2/18
    Project P2: Transitive Closure -- Released (Due 3/4)
  • 2/18
    Representing Graphs in Racket, Transitive Closure
  • 2/20
    Building an Interpreter for `IfArith`

Week 7: Midterm Review and Midterm 1

  • 2/25
    Midterm 1--Review
  • 2/27
    Midterm 1 (in class, 20%)

Week 8: Natural Deduction and Lambda Calculus Intro

Spring Break

  • 3/11
    Spring Break (No Class)
  • 3/13
    Spring Break (No Class)

Week 9: Lambda Calculus Details

Week 10: Church Encoding and Recursion

Week 11: Midterm Review and Midterm 2

Week 12: Simply-Typed λ-Calculus

  • 4/8
    Simply-Typed λ-Calculus
  • 4/8
    Project 4 -- Released (Due 4/28)
  • 4/10
    Intuitionistic Propositional Logic and the Curry-Howard Isomorphism

Week 13: Type Inference and Logic Programming

Week 14: Low-Level Programming in Rust

  • 4/22
    Rust Introduction
  • 4/24
    More Advanced Rust, Course Wrapup

Week 15: End of Class / Finals