CS250 Symbolic Computation
Instructor: Christino Tamon
Lectures: MWF 4-5pm SC362
Office hours: MW 2-4pm and F 2-3pm or by appointment SC373
Syllabus: A course that emphasizes techniques for controlling complexity
in large programming systems. 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, a dialect of LISP.
Text: Oliver Grillmeyer. Exploring Computer Science with
Scheme. Springer-Verlag, 1998.
Other references: Abelson,
Sussman and Sussman. Structure and Interpretation of Computer Programs.
MIT Press, second 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. This course will use a language
called Scheme, a dialect of Lisp, as an example of a functional programming
language. 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.
A final topic of this course will be a discussion of an assembly language
environment (PDP-11) and its implementation in Scheme. A contrast between
interpreted and compiled environments will be discussed.