Computer Science 275

Programming Abstractions

Spring 2018




Bob Geitz, King 223


Office Hours:

MWR 1:30-3:30

I am in my office withh the door open most of the day when I am not in class.


This is a course on the principles behind programming languages. We will learn the language Scheme and use it to think about the features of programming languages and how they are implemented.

Learning Goals: Here is what you should get out of this course:


The Little Schemer by Friedman and Felleisen (MIT Press, 1996) We will only use this for the first few weeks of the course. After that, everything you are expected to learn will be developed in class. Coming to class would be a good idea.


You may find these resources from the web helpful:

Class Notes:

I will post all of my Powerpoint slides and all of the code we do in class on the class website:


Exams and Grading:

We will have 2 in-class exams during the semester and a comprehensive final exam. Here is how the grades for the course will be composed:

Note that the final exam will be Thursday, May 17 at 2 PM. This time is set by the Registrar and I cannot change it for the class or for individuals. If you have issues with this time you should talk to Bo Arbogast or Donna Russell in the AARC immediately.

Late Labs

The labs in this class are closely tied to the course content. If you fall behind in the labs you won't have a clue of what is going on in the lectures and you won't be able to do the next assignment. Because of this we have a strict late-lab policy. Each assignment will be worth 50 points. We will deduct 10 points for each day your homework is late. After 5 days there is no point in handing an assignment in. If you are sick, tell me in advance. One thing in your favor is that, unlike most of the Java labs, the labs in this class are divided into lots of small programs. You can get most of the credit for an assignment even if you don't have it all working. I strongly suggest that you not put off the homework until the night before it is due.

The Honor Code

The Honor Code has a straightforward application to this class. On all of the exams you are responsible for your own work; you may neither give nor receive any information during the course of the exam. If someone takes an exam at a different time than the rest of the class there may be no communication concerning the exam between that person and anyone else in the class, not even whether the exam was easy or difficult. The atmosphere is much more relaxed for the homework assignments. You may discuss the homework, including details of the programming code, with anyone else in the class, but in the end you must write your own code. Making a copy of someone else's code and handing it in as your own, even if you change the names of the variables in the program, is a violation of the Honor Code. You should be learning to think structurally about code, so talk to anyone about functionality and then write the code yourself.

Course outline

Here is an outline that we might not stick to, but at least it gives you an idea of the course structure:





Week 1
February 5-9

Your new friends car, cdr and cons

Let expressions and lambda expressions

Lab 01: The Basics
Due Tuesday, February 12

Week 2
February 12-16

Environments. Accumulator-passing style and continuation-passsing style functions.

Lab 02: Flat Lists and Association Lists
Due Tuesday, February 19

Week 3
February 19-23

Reprsentinng structured data. Map and Apply.

Lab 03: Structured Lists and some matematical structures
Due Tuesday, Februaury 26

Week 4
Feb 26-March 2

Unrestricted lambda, Map and Apply examples. Fold

Lab 04: Higher order functions
Due Tuesday, March 5

Week 5
March 5-9

Free and Bound variables; Lexical and Dynamic binding.

Exam 1 (probably Thursday, March 8)

Week 6
March 12-16

Formal datatypes. Set!

Lab 05: Trees
Due Tuesday, March 26


Week 7
March 26-30

The Interpreter project.

Lab 06: Interpreters I -- Data Structures and Environments
Due Friday, March 30

Week 8
April 2-6


Lab 07: Interpreters II -- Simple expressions
Due Tuesday, April 10

Week 9
April 9-13

Calling mechanisms

Lab 08: Interpreters III – Lambda, set!, and letrec
Due Friday, April 20

Week 10
April 16-20


Exam 2 (possibly Thursday, April 19)

Week 11
April 23-27


Lab 09: Streams
Due Thhursday, May 3

Week 12
April 30-May 4


Lab 10: Continuations
Due Friday, May 11

Week 13
May 7-11


Week 14
Dec 5-9



Final Exam: Thursday, May 17, 2-4 PM