15-150: Functional Programming, Spring 2012


We will refer to Programming In Standard ML throughout the course.


We have set up an instance of Piazza to communicate with you. We will use this 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.

In addition to the web interface, there are Piazza apps for Android and iOS available for free through their respective app stores.


We will use a git repository to distribute files to you this semester. Instructions on how to use it are available here.

Staff Mailing List

Mail sent to the list will be delivered to all of course staff. If you have a question that you can't ask via Piazza, this is the fastest way to get a response.

Google Calendar

We maintain a google calendar with the relevant events for the course---lecture times, lab times, office hours, and homework due dates. You can find it either off the events page, or you can use the ICS address to add it to your own Google calendar. To do this: under "Other Calendars", select "Add by URL", and paste in the URL in the above.

SML Style Guide

We have published a style guide to help you write clean, clear, and concise SML. You should follow it closely and feel free to ask for clarifications. It will change and grow over the course as we learn more features of SML.

Equational Resoning Guide

We have collected the rules for equational reasoning into a guide.


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 is built from Don Knuth's TeX typesetting language, and has grown through community support to be both extremely powerful and easy to use. LaTeX is installed on the Andrew UNIX servers, and can be downloaded and installed on local machines as well. There are any number of excellent resources about how to use LaTeX; a few are listed here for your convenience.

LaTeX source files can be created with any text editor, so emacs and vim are excellent choices. There are several LaTeX specific IDEs that you may find more comfortable to use, depending on your working environment:

We have produced a simple file that shows off many of LaTeX's more helpful features in both source and pdf. There is a basic template that you can edit and use for your homework solutions on the 251 page linked above. If you have your own format that you prefer to use, please feel free to do so.


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

Andrew UNIX

Your Andrew ID gives you access to the UNIX servers via SSH. To use them, SSH to unix.andrew.cmu.edu with the SSH client of your choice. SSH ships with OS X, and can be accessed via the terminal; almost all distributions of Linux also ship with SSH or have it available through their package managers; putty is an excellent SSH client for windows users.

Once you have connected to one of the UNIX servers, you will be presented with a shell prompt, and you can work from there. The Computing Services documentation on how to use Andrew UNIX may be helpful.

You will need to use Andrew UNIX for electronic homework submissions. The directory for handin is located at /afs/andrew/course/15/150/handin/assignment name/your andrew id/

Text Editors

SML is best written in a text editor. There are IDE modes for large IDEs like Eclipse, but they are typically more trouble than they're worth. Emacs and Vim are the two clear choices for text editors in a modern UNIX environment. Rather than get into the question of which one is better, we'll give some guidence for how to use both here. Both are very mature and stable projects that provide largely the same functionality. Which of the two you prefer is entirely a question of taste.

GNU emacs

The guiding principle of emacs philosophy is that you should never have to leave emacs to preform a task if you don't want to. If you're writing C, it can run your makefile, and show you GDB output internally. It even has tetris and email clients built in. Despite being extremely large in this sense, emacs scales down to the smallest of text files elegantly.

The most sane version to use is GNU emacs, although both GNU emacs and Xemacs are installed on the Andrew UNIX machines. There's a ton of good documentation for how to use it available on the web, some of which is linked here.

You can control large swaths of emacs settings---such has indentation style, compiler hooks, and syntax highlighting---by setting its mode. There is an excellent mode specifically for editing SML. It's documentation can be found here.

Vi iMproved (vim)

The guiding principle of vim philosophy is that your text editor should do exactly that: edit text. It differs from emacs in that it makes much more extensive use of modes to get things done. You start out in command mode, which interprets keystrokes as commands, and can switch back and forth between it, insert mode (which actually enters text), and visual mode (which lets you select and modify large chunks of text). Having modes means that vim does not require a long series of keystrokes for every command.

Most Unix machines probably already have vim installed on them, but if not, odds are there is a vim package of some sort available. Windows users can also install a graphical version of vim to use as a text editor. Again, there is a great deal of documentation for vim available on the internet.

last modified 12:39, 16 May 2016
Valid CSS! Valid XHTML 1.0 Strict