Reference
[Reorganized 1 October 2015]
This page collects reading and reference material for CS 251. For documentation of tools, see the tools page.
The course schedule list topics covered in class and assignments to be completed outside of class. Many of our materials are adapted from other instructors and courses, as noted within.
- Each topic includes:
- links to slides and sample code supporting our in-class discussion of the topic
- links to readings and reference materials that offer more detail or alternative presentations
- Each assignment includes:
- links to some relevant topic materials
- links to additional readings to be completed specifically as part of the assignment (not necessarily listed here)
Assignments are also listed on a separate page.
Reference Materials
Part 0, in the abstract:
Part 1, in Racket:
-
Course notes (close to in-class presentation):
- Introducing the Racket language, 251 notes
-
Other references:
- Racket Guide, several authors: thorough and official documentation of the Racket language and libraries
- DrRacket, an implementation of the Racket programming language and an accompanying programming environment
Part 2, in Standard ML:
-
Course notes (close to in-class presentation):
-
Notes on the Standard ML language, by Dan Grossman, from CSE 341 at the University of Washington
- These notes cover largely the same material on ML as 251 (and in same style), but order topics differently and assume no background with Racket.
- ML Basics: bindings, types, expressions, functions, tuples, lists, options, immutability
- Data Types and Patterns: algebraic data types, pattern matching, polymorphism, tail recursion
- First-Class Functions: first-class and higher-order functions, closures, function types, currying
- Modules, Abstraction, and Type Inference : modules, abstract data types, type inference
-
Delayed Evaluation and Laziness, adapted from same series, but fitted closely to 251
-
-
Books on SML:
- Programming in Standard ML (PDF book), by Robert Harper
- Printed books in top drawer outside Ben’s office (Do not remove from CS department. Return here when done.):
- Elements of ML Programming, by Jeffrey D. Ullman
- ML for the Working Programmer, by Lawrence C. Paulson
-
SML libraries and tools:
- SML/NJ and Emacs SML Mode, an implementation of the Standard ML programming language and integration with the Emacs editor
- Guide to SML/NJ error messages
- Standard ML Basis Library Documentation, several authors
- Ocaml vs. SML:
Part 3, in Scala, etc.
As we wrap up the course, we use Scala to illustrate a couple points here and there, but with a much looser “learn what you need” approach. We pick off bits and pieces here and there and experiment a bit.
-
Course notes forthcoming
-
Online Reference
- Scala
- Scala for Java Programmers
- Scala By Example
- Scala Library Guides
- Scala Library Reference
- (old) Scala Actors Tutorial (ignore new Akka actors)
- Notes on Parallelism and Concurrency in Java sections 2, 3, 6-10. (Section 10 covers producer-consumer pattern)
- Scala tools on CS platforms
-
Physical books available from Ben
- Programming in Scala, by Oderksy, Spoon, and Venners.
- Programming Scala, by Wampler and Payne.
Encore
Some Racket relatives:
- Scheme (many variations)
- Common Lisp (one of many variations)
- Clojure
Some Standard ML relatives and alternate implementations: