CS 131: Programming Languages

Spring 2006


This course explores issues in programming language design through the study and implementation of interpreters. It is not a survey course of existing languages. We will see how a very high-level, almost mathematical, description of the semantics of a language can be used to systematically derive a low-level implementation for it through the application of a series of correctness-preserving program transformations. Along the way, we will become acquainted with the lambda calculus (the mathematical basis of modern programming language theory), syntactic abstraction, scoping mechanisms, parameter-passing mechanisms, continuations and continuation-passing style, lazy languages, nondeterministic languages, type checking, and other topics if time permits. Throughout the course, we will use Scheme as our meta-language for exploring these issues in a precise, analytical way—similar to the way in which mathematics is used to describe phenomena in the natural sciences. Our great advantage over mathematics, however, is that we can test out our ideas about languages, expressed in the form of interpreters, by directly executing them on the computer.

Prerequisite: CS 70


Prof. Jim Marshall
Office: Andrew Science Building 261
Office Hours: Mondays, Tuesdays, and Wednesdays 4:00-5:00 pm, and by appointment.
Phone/Voicemail: (909) 607-8650 (extension 78650 on campus)
E-mail: marshall@cs.pomona.edu

Class Meeting Time

Course Materials

Pomona Linux Accounts

All students enrolled in CS 131 should have a Linux account on the Pomona computer science network. If you don't already have one, simply fill out this on-line form.


Essentials of Programming Languages, 2nd edition
by Friedman, Wand, and Haynes

Optional Book

The following book is a good reference to have on hand for Scheme programming, but is not required for the course:

Grading and Attendance

On-time attendance in all lectures is expected. If you are unable to attend class due to illness, please contact me on the day of the missed class (or sooner). If you must miss class for any other reason, please let me know in advance.

Your final grade will be weighted roughly as follows:

Getting Help

Our student mentor this semester is Mac Mason. He will be available Sundays and Tuesdays from 8:00-10:00pm in the Harvey Mudd terminal room (Beckman B102) to answer questions about the course material or homework assignments. You can contact him directly at mac@cs.hmc.edu.

You are strongly encouraged to come to my office hours or talk to Mac whenever you are having difficulty with the material. If you are confused about something, don't stay that way! Staying confused will only make things worse later. Come see one of us as soon as possible so that we can clear up the problem. There is no point in banging your head against a wall for hours trying to figure out why your program won't work, when just a few minutes is usually all it takes to track down the problem together.

If you want to see me but can't make it to my office hours, I'll be more than happy to schedule an appointment. Ask me about it in class, send me some e-mail, or leave a message on my voice mail. You can also try to catch me outside of my regular office hours, though I can't always guarantee that I'll have time to meet with you right then.

Collaboration Policy

The highest level of academic integrity is expected of every student. You are strongly encouraged to discuss ideas and approaches to solving problems, on a general level, with the student mentor or your fellow classmates, but unless I tell you otherwise, the work you hand in must be exclusively your own. Effective learning is compromised when this is not the case.

Accordingly, you should never read or transcribe another student's code or solutions, exchange computer files, or share your code or solutions with anyone else in the class. Under no circumstances may you hand in work done by, or in collaboration with, someone else under your own name, with the exception that you may freely use any code that I explicitly provide to you.

When in doubt, credit the people or sources from whom you got help. This also goes for any help obtained via the Internet. You will not lose any points for acknowledging significant help obtained in a legitimate fashion (for example, from the student mentor, or from books, Web sites or articles). If you are ever unsure about what constitutes acceptable collaboration, just ask.

Failure to abide by these rules is considered plagiarism, and will result in severe penalties, including possible failure in the course. Please do not put me, yourself, or anyone else in this unpleasant situation.