Computer Science 275

Programming Abstractions

Fall 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 Wednesday, December 19 at 9 AM. 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
Sept 4,6

Your new friends car, cdr and cons

Let expressions and lambda expressions

Lab 01: The Basics
Due Thursday, September 13

Week 2
Sept 11,13

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

Lab 02: Lists and Recursion
Due Thursday, September 20

Week 3
Sept 18

Reprsentinng structured data. Map and Apply.

Lab 03: Structured Lists
Due Thursday, September 27

Note: No class September 20.

Week 4
Sept 25,27

Unrestricted lambda, Map and Apply examples. Fold

Lab 04: Higher Order Functions
Due Thursday, October 4

Week 5
Oct 2, 4

Free and Bound variables; Lexical and Dynamic binding.

Exam 1 (probably Thursday, October 4)

Week 6
Oct 9, 11
Formal datatypes. Set! Lab 05: Interpreters 1 - Creating an Environment
Due Tuesday, October 16

Week 7
Oct 16,18

The Interpreter project

Lab 06: Interpreters I I-- Interpreting Basic Expressions
Due Thursday, November 1

Fall BREAK!!!

Week 8
Oct 30, Nov 1


Lab 07: Interpreters III -- Lambdas, Set! and Letrecs
Due Thursday, November 8

Week 9
Nov 6,8

Calling mechanisms

Lab 08: Interpreters IV – Additions to the nterpreter
Due Thursday, November 15

Week 10
Nov 13,15


Exam 2 (possibly Thursday, November 15)

Week 11
Nov 20


Lab 09: Streams
Due Thursday, November 29

November 22 is Thanksgiving.

Week 12
Nov 27,29


Week 13
Dec 4,6

Call/cc Lab 10: Continuations
Due Wednesday, December 12

Week 14
Dec 11



Final Exam: Wednesday, December 19, 9-11 AM