Computer Science 275

Programming Abstractions

Fall 2019




Bob Geitz, King 223


Office Hours:

MTW 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.


We will also use clickers this semester. You should already have a clicker from CSCI 150, 151, or 241. You should bring it to class every day,


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, 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 3,5

Your new friends car, cdr and cons

Let expressions and lambda expressions

Lab 01: The Basics
Due Thursday, September 12

Week 2
Sept 10,12

Environments and closures. Set! and variations on Let.

Lab 02: Lists and Recursion
Due Thursday, September 19

Week 3
Sept 17,19

Structured lists. Higher level functions: Map, Apply and Fold

Lab 03: Structured Lists
Due Thursday, September 26

Week 4
Sept 24,26

Unrestricted lambda, Map and Apply examples. Fold

Lab 04: Higher Order Functions
Due Thursday, October 3

Week 5
Oct 1, 3

More on Recursion:

The Y-Combinator

Exam 1 (probably Thursday, October 3)

Week 6
Oct 8, 10
Backtracking. Prolog Lab 05: Backtracking and Prolog
Due Thursday, October 17

Week 7
Oct 15,17

More on Prolog

Lab 06: Prolog
Due Thursday, October 31


Week 8
Oct 29, 31

Datatypes. Environments

Lab 07: Interpreters I -- The Environment
Due Thursday, November 7

Week 9
Nov 5,7


Lab 08: Interpreters II Interpreting Basic Expressions
Due Tuesday, November 12

Week 10
Nov 12,14


Exam 2 (possibly Thursday, November 15)

Week 11
Nov 19, 21


Lab 09: Interpreters III: Lambdas, Set! and Letrec
Due Tuesday, November 26

Exam 2 (possibly Thursday, November 21)

Week 12
Nov 26


November 28 is Thanksgiving.

Week 13
Dec 3,5

Continuation-passing Style Lab 10: Streams
Due Thursday, December 12

Week 14
Dec 10, 12



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