Computer Science 275

Programming Abstractions

Fall 2016




Bob Geitz, Rice 11


Office Hours:

MW 2-4, TR 11-12 in King 221

I am in Rice 11most 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.


The Little Schemer by Friedman and Felleisen (MIT Press, 1996)


You may find these resources from the web helpful:



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 Friday, December 16 at 9AM. 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 the Dean of Studies 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
Augt 29-Sept 2

Your new friends car, cdr and cons

Lab 01: The Basics
Due Wednesday, September 7

Week 2
Sept 7-9

Representing data in Scheme

Lab 02: Flat Lists and Association Lists
Due Wednesday, September 14

Week 3
Sept 12-16

Map and apply

Lab 03: Structured Lists and some matematical structures
Due Wednesday, September 21

Week 4
Sept 19-23

Higher-order functions

Lab 04: Higher order functions
Due Wednesday, September 28

Week 5
Sept 26-30

  Data Structures

Exam 1 (probably Friday, September 30)

Week 6
Oct 3-7

Lab 05: Trees
Due Friday, October 14

Week 7
Oct 10, 14


Lab 06: Interpreters I -- Data Structures and Environments
Due Friday, October 28


Week 8
Oct 24-28


Lab 07: Interpreters II -- Simple expressions
Due Monday, November 7

Week 9
Oct 31-Nov 4

String manipulation

Week 10
Nov 7-11

Calling mechanisms

Lab 08: Interpreters III – Let, lambda
Due Monday, November 14

Week 11
Nov 14-18


Exam 2 (possibly Friday, November 18)

Week 12
Nov 21, 23

Lab 09: Streams
Due Wednesday, November 30

Week 13
Nov 28-Dec 2

Continuation-passing style Lab 10: Continuations
Due Friday, December 9

Week 14
Dec 5-9



Final Exam: Friday, December 16, 9-11 AM