CS250 Symbolic Computation (Fall 2004)
Course Prerequisites: CS142 Introduction to Computer Science II
Course Contact InformationInstructor: Chris
Lectures: MWF 11am SC 344
Office hours: MW 2-4pm F 3-4
Contact: SC 377, email@example.com
Text: Simon Thompson, Haskell: The Craft of
Functional PRogramming, Addison Wesley (1999).
Topical OutlineThis course is a study of functional programming. In
previous introductory courses, a particular type of programming paradigm called
the imperative or procedural programming was studied. These two paradigms differ
in the way computation is viewed. The imperative paradigm treats computation as
operations performed on state variables; the functional paradigm treats
computation as functions operating on values. Some 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. Most functional programming languages are
interpreted (instead of compiled) and strongly supports symbolic computation (as
opposed to numerical). Recursion and higher-order functions will play an
important role in exploring symbolic computation through functional programming.
Other topics include type inference and lazy evaluation. This course uses the
programming language Haskell as the main example of a functional programming
Objectives and OutcomesThe objective of this course is to introduce
students to the functional paradigm of progrmaming with some emphasis on
symbolic computation, its implications and applications, and the beautiful types
of abstractions that they provide.
The specific outcomes of this course include:
- Proficiency in programming with the functional programming language
- Familiarity with advanced uses of recursive reasoning for designing
program and data abstractions and its impact on the efficiency and correctness
- Exposure to higher-order procedures and the many abstractions that they
- An understanding of type inference and lazy evaluation
Requirements and PoliciesAlthough attendance is not mandatory, students
are responsible for all course materials covered in lectures given during class
periods. Students that need to make up missing course work must provide the
required Clarkson official exempt form. All students must submit their own work;
the exchange of ideas are encouraged but ultimately the submitted work must be
the student's own. If a student exchanges ideas with another student or gets
ideas from another source, then that source must be mentioned on the homework
paper. If that is not done, then it is consdidered cheating. Of course it is
also considered cheating to copy something even if the source is referenced.
Please refer to the Clarkson University Regulations for more guidelines on
academic integrity and related matters.
- Final exam: 30%
- Two exams: each 20% (dates: ??)
- Homework: 30%
Schedule of Topics
- Functional versus imperative programming.
- Chapter 2-4: Basics of Haskell.
- Chapters 5-7: Lists, List Comprehension and Primitive
- Chapter 8 and elsewhere: Reasoning about
- Chapters 9-11: Functions as first-class objects.
Passing functions as inputs and as outputs. Map, Filter and Fold.
- Chapter 12: Overloading and Type Classes.
- Chapter 13: Type Checking .
- Chapters 14-16: Algebraic Types and Abstract Data
- Chapter 17: Lazy Programming and Infinite Lists.
- Chapter 18: Input/Output in a Pure Language.
- Chapter 19: Efficiency.
SoftwareThe HUGS Haskell
Interpreter must be installed on your PC.