CS 15-150: Principles of Functional Programming
(Fall 2012)

Course Information  [  Logistics  |  Course Links  |  Calendar of Classes  |  Coursework Calendar  ]

   (Your comments will be sent anonymously to the instructors)


Lectures:  Su,Tu   15:00 - 16:20 (room 1199)
Labs:  Th   15:00 - 16:20 (room 1032)

Class Webpage:   http://qatar.cmu.edu/cs/15150
Instructors:   Iliano Cervesato
Office hours:  by appointment (check schedule)
Office:  CMU-Q 1008
TA:   Ian Voysey
Office hours:  by appointment
Office:  CMU-Q 1017

Course Links

Calendar of Classes

Click on a class day to go to that particular lecture or recitation. Due dates for homeworks are set in bold. The due date of the next homework blinks.

Coursework Calendar

About this course  [  Description  |  Prerequisites  |  Feedback  |  Software  |  Readings  |  Grading  |  Assessment  ]


This course has the purpose of introducing students who have had experience with basic data structures and algorithms to more advanced skills, concepts and techniques in programming and Computer Science in general. This will be accomplished along three dimensions. After completing 15-150, you will be able to take 15-210 (Parallel and Sequential Data Structures and Algorithms) and 15-214 (Principles of Software System Construction).


You must have completed 21-127 (Concepts of Mathematics).


It is my goal to make this course successful, stimulating and enjoyable. If at any time you feel that the course is not meeting your expectations or you want to provide feedback on how the course is progressing for you, please contact me. If you would like to provide anonymous comments, please use the feedback form on the course home page or slide a note under my door. Comments of general interest will be answered on the course discussion board.


The course relies extensively on the programming language Standard ML (SML) and related utilities. The particular implementation we will be working with is Standard ML of New Jersey (SML/NJ), version 110.74.

SML on Your Own Laptop

The most convenient way to use SML is to install a personal copy of SML/NJ on your laptop. For Windows laptops, download this file and follow these instructions. If you run a different operating systems, read here. You will want to configure your favorite editor so that you can run SML directly inside it, not from a separate terminal window.


A reference build has also been made available in the virtual Unix clusters. To run it, you need to login into your Unix account. In Windows, you do this by firing PuTTy and specifying unix.qatar.cmu.edu as the machine name. When the PuTTy window comes up, type sml, do your work, and then hit CTRL-D when you are done.

You can edit your files directly under Unix (the easiest way is to run the X-Win32 utility from Windows and then run the Emacs editor from the PuTTy window by typing emacs - see also this tutorial).

If you want to do all this from your own laptop, you first need to install X-Win32 from here. PuTTy is pre-installed in Windows.


Useful documentation can be found on the SML/NJ web site. The following files will be particularly useful:


We strongly encourage you to typeset the essay part of your homeworks in LaTeX (we will take this into account as part of your participation grade). It takes some getting used to it, especially if MS Word is all you've been exposed to, but it enormously simplifies producing pleasant mathematics. Here are some useful references:


The 15-212 Wiki

The material for most of the lectures can be found on the 15-212 wiki. This is wiki, not a textbook. The main differences are:

Further References


This is a 10 unit course.

Late Policy

Every student has up to 3 late days. You can use only one late day per assignment or project. No fractional late days: if you submit 1 minute late, you have used up a full late day. You should use late days for emergencies only: if you start early, you will not need them.

Academic Integrity

You are expected to comply with the University Policy on Academic Integrity and Plagiarism.

Collaboration is regulated by the whiteboard policy: you can bounce ideas about a homework with other students, but when it comes to typing it down for submission, you are on your own — no notes, files, snapshots, etc. Morever, you must wait at least 4 hours before writing down the solution.


Course Objectives

This course seeks to develop students who:
  1. can leverage the mathematical structure of a problem to develop a solution
  2. can use abstraction and modularity to manage complexity
  3. can use formal arguments to justify the correctness of a problem solution and determine its asymptotic cost
  4. master a non-declarative programming paradigm
  5. have gained advanced skills, concepts and techniques in programming and Computer Science

Learning Outcomes

Upon successful completion of this course, students will be able to:
  1. explain and use basic programming language concepts such as typing, evaluation, declarations, expressions, values, and types
  2. explain and use advanced programming language concepts such as data types, pattern matching, polymorphism, higher-order functions, continuations, exceptions, streams, memoization, modularity
  3. design recursive algorithms and develop recursive programs
  4. use mathematical induction to prove program correctness
  5. determine the asymptotic cost of a sequential and maximally parallel solution to a problem
  6. model problems in Computer Science using lists, trees and graphs
  7. exploit a problem's data flow to program parallel solutions
  8. program symbolic solutions to problems using data types and pattern matching
  9. use polymorphism and functional arguments to build reusable program modules
  10. develop abstract and parametric modules for code reusability
  11. recognize non-computable problems and give formal arguments to support non-computability claims

Schedule of Classes


The course is organized around the following themes:
Weeks 1-5 Weeks 6-8 Weeks 9-14
Inductive definitions Functions Beyond induction and parallelism

In this course, there will be three types of class periods, one each week, in the following order:

At a glance ...

2012 Iliano Cervesato