CS 442: Principles of Programming Languages

Resources

Annotated links will be posted here as the term progresses.

Scheme

Most Scheme distributions implement the R5RS standard or some subset of it. A few (including Racket, formerly known as PLT Scheme) support the most recent (and somewhat controversial) R6RS standard. Racket is a family of languages that provide extensions well beyond these standards but also break with their precedent in certain ways (notably in making standard lists immutable). The best reference for Racket is found in the Help Desk documentation, most of which is also available on the Racket website.

The best reference for standard Scheme is Kent Dybvig's book "The Scheme Programming Language", whose recent fourth edition is available online. Be warned, however, that the author uses the lambda form to define functions throughout the book (and justifies this decision in section 2.6). Nothing in CS 442 should require the use of this book, but it provides a more complete description of the Scheme language for those who are interested.

More references, including an extensive bibliography, are available on the schemers.org website.

ML

The SML/NJ documentation will be helpful, particularly the section on error messages. The sections on the Basis and SML/NJ libraries may be useful, though we will not make heavy use of them.

The best book on Standard ML is probably Paulson's "ML For The Working Programmer", which is organized more as a textbook (and a very good one) than as a reference. Ullman's "Elements of ML Programming" does better on the reference side but worse on the textbook side (due to an overly conventional approach). The concise document "Tips for Computer Scientists on Standard ML", by Mads Tofte, has a high quality/length ratio. The book "The Definition of Standard ML", by Milner et al., contains the full semantic definition of the language; it is not really meant as a learning tool for programmers. This course page has some useful tips on style in ML programs.

OCaML is under active development and has many user-contributed libraries suitable for modern projects. The CaML website has links to online tutorials and books. There are a number of small differences in syntax and approach between SML and OCaML, explained here and here. Microsoft's F# Developer Center has more information on this latest dialect of ML.

Haskell

Haskell.org is your one-stop shop for all things Haskell. Of particular interest: the Haskell Report, the standard Prelude, its readable definition, and the Hoogle search engine. There's also a wiki, a blog aggregator, and more tutorials than you can possibly use.

The best book on Haskell for the beginner is Graham Hutton's "Programming in Haskell". Simon Thompson's "Haskell: The Craft of Functional Programming" and Paul Hudak's "The Haskell School of Expression" are also very good. The recent O'Reilly book "Real-World Haskell" (O'Sullivan, Stewart, Goertzen) pretty much lives up to its title. If it sometimes gives off a slight whiff of "written by committee" or "blog posts stapled together", that is more than offset by the fact that it was developed with extensive feedback from the Haskell community and is available online.

Smalltalk/Pharo

To be added.