CSCI 312: Programming Language Design


General Information

Professor: Simon D. Levy
Lecture: M/W/F 2:30 - 3:20 Parmly 405
Office: Parmly 407B
Office Phone: 458-8419
E-mail: levys@wlu.edu
  Office Hours: T/R 1:30-4:30 and by appointment
Textbooks:


Brief Overview

This course will introduce you to some of the most beautiful and elegant ideas in computer science, which place the field at the center of a true liberal education. Just as important, you will learn the very practical skills of (1) programming in Scheme (a dialect of LISP), and (2) designing your own programming languages and building interpreters for them. We will start with a two-week "Scheme boot camp", and then move on to using the language to write interpreters in the remainder of the course. To stay in contact with other important programming languages embodying the concepts we are learning about, we will also have assignments in ML and Prolog.


Attendance and Preparation

It is very important that you attend class. There will be considerable information given in class that is not available elsewhere. Your participation is of value to your classmates and to me. In preparation for class, be sure to review the material covered in the last class meeting. See me or email me if you have questions. Also, read over the material to be covered in the next class meeting.


Grading

The grading scale will be 93-100 A; 90-92 A-; 87-89 B+; 83-86 B; 80-82 B-; 77-79 C+; 73-76 C; 70-72 C-; 67-69 D+; 63-66 D; 60-62 D-; below 60 F.


Honor System

Unless stated otherwise, the exams will be done without books or notes and without assistance from other people. You may work with another person on the programming assignments, but this should be acknowledged in your code.


Assignments

All assignments for this course will involve writing programs, initially in Scheme, then later in ML and Prolog. The Linux and Windows machines in the CS Department should all have PLT Scheme installed, but I encourage you to download it onto your laptop or home computer and work on these assignments anywhere you like. Scheme is a simple, elegant language that encourages working on problems in small pieces, so it's convenient to have Scheme available any time you get inspired to do a little coding.

Assignments are due on midnight of the due date, and should be sent to me as email attachments. We'll move at a quick enough pace that late assignments can't be accepted, but note that (1) I will drop your lowest assignment or quiz grade, so missing a single assignment or quiz is not going to ruin your final grade; and (2) if you have a genuine emergency (family, medical, or other serious, unanticipated crisis beyond your control), I'll make sure you have some extra time to complete an assignment. Experience has taught me that the students who do best in this course are the ones who take advantage of office hours for help with assignments.
  1. Problem Set 1 (due Fri 02 Oct):     lunar.scm
  2. Problem Set 2 (due Wed 14 Oct)
  3. Problem Set 3 (due Wed 28 Oct)
  4. Problem Set 4 (due Wed 11 Nov)
  5. Problem Set 5 (due Wed 02 Dec)   Read this first



Tentative Schedule of Lectures and Exams


 

Monday

Wednesday

Friday



07 Sep
Week 0
    Course Overview;
Introduction to PL'S;
PL's vs. Natural Languages


14 Sep
Week 1
History of PL's;
Intro. to Scheme
Scheme: Lists + Recursion;
Programs as Proofs
Data Structures;
Interpreters as Programs;
The Halting Problem


21 Sep
Week 2
Chapter 1: Inductive Sets of Data Quiz, Little Schemer Ch. 1-4

Chapter 1: Scoping and Binding of Variables
Chapter 1:
Scope & Lexical Address




28 Sep
Week 3
Quiz, Little Schemer Ch. 5-8

Chapter 2, Section 1: Specifying Data via Interfaces
2.4: A Tool for Defining Recursive Data Types 2.5: Abstract Syntax

PS 1 due



05 Oct
Week 4
Chapter 1 Review Quiz, Chapter 1

2.2: Representation Strategies for Data Types


12 Oct.
Week 5
PS 2 due

3.1-2: LET: A Simple Language
Reading Day; No class


19 Oct
Week 6
Quiz, Chapter 2

3.3: PROC: A Language with Procedures

3.4: LETREC: A Language with Recursive Procedures
Chapter 4: State / 4.2: EXPLICIT-REFS


26 Oct
Week 7
4.3 IMPLICIT-REFS PS 3 due 4.5: Parameter-Passing Variations



02 Nov
Week 8
Review Chapters 2 - 4 Exam #1: Chapters 2 - 4 Chapter 7: Types


09 Nov
Week 9
CHECKED: A Type-Checked Language Type Inference

PS 4 due

Intro to ML


16 Nov
Week 10
Quiz, Chapter 7

ML: Type variables;
let; polymorphism
Into to Prolog Prolog: Lists;
Anonymous Variables,
Backtracking/Cut


30 Nov
Week 11
PS 5 due


07 Dec
Week 12
Review Exam #2


Scheme, LISP, and Hacker Folklore