CS250 Symbolic Computation
Instructor: Christino Tamon
Lectures: MWF 3-4pm SC162
Office hours: MW 2-3pm, 4-5pm and F 2-3pm SC373
Syllabus: A course that introduces symbolic computation
and functional programming. Topics covered include building abstractions
with procedures and with data (recursion, higher-order procedures, compound
and hierarchical data) and controlling interactions (generic operations,
modularity, objects, infinite data structures, self-describing data). Students
will be introduced to symbolic computation using Scheme.
Text: Max Hailperin, Barbara Kaiser and Karl Knight. Concrete
Abstractions. ITP, 1999.
- Daniel P. Friedman and Matthias Felleisen. The Little Schemer.
The MIT Press, 4th edition, 1996.
- Daniel P. Friedman and Matthias Felleisen. The Seasoned Schemer.
The MIT Press, 1996.
Other references: Harold Abelson, Jay Sussman and Julie Sussman.
Structure and Interpretation of Computer Programs. MIT Press,
2nd edition, 1996.
- Final exam: 40%
- Midterm exam: 20%
- Assignments and quizzes: 40%
Course Plan: In this course we will study functional programming.
In the two previous introductory courses, CS141 and CS142, we studied
a particular type of programming paradigm called imperative or procedural
programming. The functional paradigm differs from the imperative paradigm
in the way one views computation. The imperative style treats computation
as operations performed on state variables whereas the functional style
treats computation as functions operating on values. Benefits
of the functional approach, among others, are the clean and direct approach
to program design without introducing unnecessary side-effects. Typical
well-written functional programs are easier to understand, simpler to
debug, and have a simple proof of correctness. Recursion and higher-order
functions will play an important role in our exploration of symbolic
computation in functional programming. Other topics include streams
(infinite list structure) and generic procedures. This course will use
a language called Scheme, a dialect of Lisp, as an example of a functional
programming language. Some of the assignments will deal with applications
in machine learning and related areas.
- Basic UNIX and vi tutorial (under construction).
- MIT Scheme