CS 357: Declarative Programming
Instructor: Lance Williams
<williams@cs.unm.edu>
Time: MWF 12:00 - 12:50 PM
Location: ME 201
Office Hours: Mon. 4:00-5:00 PM, Tues. 11:00-12:00 PM
Office: FEC 349C
Description
[Lisp] is the only computer language that is
beautiful. - Neal Stephenson
I'd rather write programs to write programs
than write programs.
-D. Sites
What I cannot create I do not understand.
- R. Feynman
Teaching Assistant
Name: Matthew Barrick
<matthew@cs.unm.edu>
Office Hours: Tues., Thurs. 11:00-1:30
Office: FEC 321
Textbooks
The text for the course will be Scheme and the Art of Programming by George Springer and Daniel
P. Friedman (MIT Press, 1989). You may purchase a copy of the text at
the UNM Copy Center which is located in Dane Smith Hall.
The text for Haskell will be
Learn you a Haskell for Great Good,
which is entirely online.
If you're really hardcore, check out
Structure and Interpretation of Computer Programs by Harold
Abelson and Gerald Jay Sussman with Julie Sussman (2nd edition, MIT
Press, 1996) which is available online in its entirety. SICP is the
introductory programming text used at MIT.
Related Material
We will use the MzScheme Scheme
implementation, which is principled and fast enough for our
purposes. You probably will want to use GNU Emacs as
your editor. I do. Or use XEmacs
if you prefer. The brief GNU Emacs Reference
Card can be helpful. If you want to run MzScheme from
inside Emacs, you will want to include these definitions in a file called
.emacs in your home directory. Later in the course, when we
study Haskell, we will use the GHC
implementation.
The R5RS
Manual describes the Scheme standard. Teach
Yourself Scheme in Fixnum Days by Dorai Sitaram is also
useful. Finally, The Scheme
Programming Language: ANSI Scheme by R. Kent Dybvig, (2nd
Edition, Prentice Hall, 1996) is available online in its entirety.
Course Syllabus **
- Week 1 (SAP pp. 3-29)
- Introduction
- Evaluating Expressions
- Week 2 (SAP pp. 31-53, SAP pp. 95-114)
- Week 3 (SAP pp. 115-127)
- Week 4 (SAP pp. 129-140)
- Week 5 (SAP pp. 193-202, SAP pp. 210-215, SAP pp. 218-222)
- (contd.)
- Currying
- Procedural Abstraction
- Week 6 (SAP pp. 347-349, pp. 360-370, pp. 383-408)
- (contd.)
- Object Oriented Programming
- Memoization
- Week 7 (SAP pp. 447-465, pp. 475-493)
- Macros
- Lazy Evaluation and Streams
- (contd.)
- Week 8
- Review
- Midterm Exam I
- No class
- Week 9
- Spring Break
- (contd.)
- (contd.)
- Week 10 (LYHFGG 1-2)
- Lazy Evaluation and Streams (reprise)
- Introduction to Haskell
- (contd.)
- Week 11 (LYHFGG 3)
- Review
- Midterm Exam II
- Types and Type Classes
- Week 12 (LYHFGG 4-5)
- Haskell Syntax
- Recursion
- (contd.)
- Week 13
- Week 14 (LYHFGG 6)
- Higher Order Functions in Haskell
- (contd.)
- (contd.)
- Week 15
- Implementation of Scheme
- (contd.)
- Review
Grading
Grading
- Homeworks***: 25%
- Midterm Exam I: 25%
- Midterm Exam II: 25%
- Final Exam: 25%
** Subject to change
*** All assignments are due at the assigned times. The TA may,
but are not obligated to, accept late submissions at a penalty of no
less than 10% per 24 hours late.