CSPP 51091-1: Functional Programming and Software Prototyping

Winter Quarter, 2007 
Tuesday, 5:30 pm - 8:30 pm
Ryerson 251


Index

Announcements
Instructor Contact Info
Course Description
Course Textbooks
Course Policies
Course Blog
Course Schedule
Homework Assignments
Handouts
Sample Code
Programming in SML


Announcements/Updates

The first class will be on Tuesday, Jan. 9, 2007 at 5:30pm in Ryerson 251.

There will be no class on Tuesday, Jan. 16. Instead, a makeup class was scheduled for Friday, Feb 2 at the same time.

There will be a midterm exam during the first hour of class on Feb 6. A second in-class midterm exam will be held on Feb. 7. In lieu of a final, we will have a programming project, due at the end of Finals week (March 16).

Instructor Contact Info

Name Role Office Office hours Phone Email
David MacQueen Professor Hinds 045 By appointment 2-4980 dbm@cs.uchicago.edu

Course Description

Functional programming is a programming paradigm that views functions as first-class objects of computation and structures programs in terms of the definition and application of functions. It has also been called "value-oriented" programming because it deals primarily with immutable values and data structures, minimizing or even eliminating the use of assignment and other side-effects. The major advantage of functional programming is that it combines great expressive power with simplicity, making it possible to construct working programs more quickly, and making it easier to ensure that those programs work correctly.

The advantages of functional programming can be exploited in software engineering even in situations where the final software product is constructed using conventional imperative and object-oriented languages. One use of functional programming is to do rapid prototyping, exploring a design space quickly with less programming overhead. Another is the use of functional programs as executable specifications or models of the functionality desired in the final system. We will also look at examples where functional programming has been successfully used in real-world, commercial applications.

In this course we will use two popular functional languages, ML and Haskell, representing the hybrid and pure versions of the functional paradigm. No prior experience of functional programming is assumed, though some programming experience in languages like C, Java, or scheme is highly recommended.

Course Textbook

Their will be two textbooks for the course. The first, covering programming in Standard ML, is Elements of ML Programming, 2nd Edition (ML97) by Jeffrey D. Ullmann. The second textbook will cover programming in Haskell, and will be announced here soon.

Programming Exercises

This course is centered on programming in Standard ML and Haskell, with regular programming exercises and examples. We will be using the SML/NJ compiler for Standard ML. There are several good sources of documentation and tutorials for SML/NJ available online, and some of these are given in the course SML/NJ page. Additional information and resources for programming in Haskell will appear here shortly.

Course Policies

Course Blog

A course blog has been created for announcements and discussions. The homework assignments will be posted there and on this page.

Homework Assignments

Midterm Solutions

Midterm 1 Solutions
Midterm 2 Solutions

Sample Code

Additional Useful Links

More background on underlying programming language theory:
Dave MacQueen
Last modified: Fri Mar 9 00:32:58 CST 2007