15-150: Functional Programming, Spring 2022


There is no required textbook for the course. All material we expect you to be familiar with will be covered in sufficient detail in the lectures and lecture notes. There is an optional (and free!) text which some students find useful, called Programming In Standard ML (PSML). This book is based on the lecture notes for the predecessor to this course, 15-212.

We are also in the process of constructing a new reference website, smlhelp.github.io. As we create them, we'll post supplementary notes, guides, tutorials, etc.


We use Piazza to answer questions about the assignments, allow for students to discuss course material, and make announcements about the class. You are responsible for being current with the information and discussions that are posted there.

You will get an email from Piazza with a link inviting you to create an account within the first week of the term. If you haven't gotten one in that time, please contact course staff.

Canvas and Gradescope

We will use Canvas to distribute files to you this semester. You can find homework and lab handouts and code files in the Canvas assignment pages. Written solutions and code files should be turned in to Gradescope.

SML Style Guide

Here is a style guide to help you write clean, clear, and concise SML. You should follow it closely and feel free to ask for clarifications. Remember, style points are part of your homework grade!

Great Practical Ideas for 15-150

There are lots of tools which will make your experience as a 15-150 student substantially more pleasant. Thus, we have a tools guide which outlines what tools we recommend and how to set them up.

We also have created a setup guide which details tasks (like ssh and scp) which you'll need for this semester.



We require that you turn in your written homework assignments as a typeset PDF. There are many ways to create such a PDF, and you may use whichever one you feel comfortable with, but LaTeX is one of the best solutions.

LaTeX source files can be created with any text editor, so emacs and vim are excellent choices. We highly recommend using Overleaf, an online LaTeX editor that allows you to create LaTeX documents without setting anything up. There are also several LaTeX specific IDEs that you may find more comfortable to use, depending on your working environment.


An official installation of SML of New Jersey (sml/nj) can be run from the Andrew Unix servers at unix.andrew.cmu.edu. They are running version 110.98.1. All of your submissions for the class should compile on the unix machines.

sml/nj can be run from the command 'sml' in your shell. Alternatively, we have set up a macro 'smlnj' in /afs/andrew/course/15/150/bin that automatically wraps this with rlwrap, a convenient utility that allows you to use the arrow keys to go back and forth on a line and traverse your command history.

If you want a local copy of sml/nj, one can be acquired from the sml/nj website. There is source code available there, as well as platform-specific installation instructions. If you are running a distribution of Linux, there is a decent chance that you can find sml/nj in your package manager, though the version may or may not be the same as the one on the unix machines. If you end up doing this, we encourage you to make sure your code compiles on the unix machines before submitting it.

last modified 21:47, 01 Sep 2020