CSci 555: Functional Programming
Spring Semester 2001
The spring semester 2001 class meets in 352 Weir
Hall at 6:30 p.m. to 9:15 p.m. on
The class is taught by Prof. Conrad Cunningham, whose
office is in 312 Weir Hall. The official office
hours for this class are 9:30 a.m. until 11:30 a.m. on Tuesdays and
Thursdays and by appointment at other times.
Prof. Cunningham's voice telephone number is (662) 915-5358 and fax
number is (662) 915-5623. His WWW home page is
and his email address is firstname.lastname@example.org
The WWW home page for this class is
The final examination for this class is scheduled for 7:30 P.M. on
Tuesday, 8 May 2001.
Student Disabilities Services Statement
"It is the responsibility of any student with a disability who
requests a reasonable accommodation to contact the Office of
Disability Services (915-7128). Contact will then be made by that
office through the student to the instructor of this class. The
instructor will then be happy to work with the student so that a
reasonable accommodation of any disability can be made."
The goals of this course are (1) to introduce the students to the
principles and techniques of programming with a purely functional,
lazily evaluated programming language and (2) to give them practice in
reasoning about and manipulating programs as mathematical entities.
Course Description from the Catalog
The principles and techniques of programming with functions.
Purely functional programming languages; recursion; higher-order
functions; reduction models; strictness; type systems; list
operations; infinite data structures; program synthesis and
Senior or graduate standing in computer science.
Anyone who does not have a mature understanding of programming in
an imperative language (e.g., Pascal or C), of basic algorithms and
data structures (e.g., sorting, searching, lists, stacks, and trees),
and of basic discrete mathematics (e.g., sets, relations, functions,
induction, and simple algebraic concepts) should contact the
instructor before enrolling in the course. Successful completion of
CSci 111, 112, and 211 and Math 301 should give sufficient background.
- Simon Thompson.
Haskell: The Craft of Functional Programming, SECOND
EDITION. Addison Wesley, 1999. ISBN: 0-201-34275-8.
- H. Conrad Cunningham.
Notes on Functional Programming with Gofer.
Technical Report UMCIS-1995-01.
Note: Gofer is an earlier name for the Hugs interpreter used this
- Hugs interpreter
for the language Haskell 98. The system was originally developed by
Mark P. Jones, now of the Oregon Graduate Institute.
Versions of the Hugs interpreter are available locally for Unix
and Windows systems. See the resource
links Web page for links to the software and documentation.
Hugs has been installed on Unix system john.cs.olemiss.edu and on
the Adler lab systems. It can be made available on other systems as
needed and available.
- Mark P. Jones and John C. Peterson.
Hugs 98, A Functional Programming System Based on Haskell 98,
User Manual Manual.
The user manual is available locally in various formats.
See the resource
links Web page for the relevant links.
- Paul Hudak, John Peterson, and Joseph Fasel.
A Gentle Introduction to Haskell Version 98
The tutorial is available locally in various formats.
See the resource
links Web page for the relevant links.
- Various journal and conference articles, research reports,
and book excerpts as appropriate.
- Functional programming concepts.
- Introduction to Haskell. First-order functions. Data types.
- Higher-order functions.
- List comprehensions.
- User-defined data types. Trees.
- Programming laws. Program synthesis techniques.
- Purely functional input/output.
- Interpretation techniques. Program efficiency.
- Type Classes. Modules. Abstract data types.
- Infinite data structures.
As a student in CSci 555, you are expected to conduct yourself in
a professional manner according to the
Honor Code of the School of Engineering, the Information
Appropriate Use Policy, the M Book, and any other
Limited Collaboration Policy. Unless otherwise
indicated, any homework assignment or programming exercise given in
this class will be an individual assignment. The work you submit is
to reflect the knowledge, understanding, and skill that you have
attained as an individual. However, the instructor does want to
encourage the development of a community of scholars who are actively
engaged in discussion of the ideas related to this course. With this
in mind, you are allowed to discuss solutions of the homework and
programming problems with other students if done so according to the
- You may discuss ideas for homework and
programming assignments with your classmates. However, you
cannot collaborate on writing the solution or the
program code. That is, you can talk about the problems and
ideas for solving them, but you cannot write things down with anyone
else. You are, of course, prohibited from copying or seeing another
student's written solution, and you are not allowed to show your work
to anyone else. Similarly, you are not allowed to copy text or
program code from a book or a page on the Web unless explicitly
authorized to do so by the instructor.
- You should accept help with care. If you work
too closely with another student, you might mislead yourself into
believing that you understand the concepts and techniques better than
you actually do. Don't forget that the instructor has office hours
and can probably give you hints or suggestions to get you started.
- You should give help with care. Do not help
anyone too much. When you have solved a problem, it is tempting to
just tell other students how you solved it. Instead, try to allow
them to come to the solution on their own. Maybe give them a hint to
help them get "over a hump." Remember that helping someone too much
will hurt them in the long term if they can't work through problems on
the exams by themselves. So avoid the temptation to do so. If you
can't help other students without giving away the whole solution,
direct them to see the instructor (who may or may not have a way to
"edge" them toward the solution).
- You are not obligated to help anyone. If you
feel uncomfortable helping another student for any reason, please
direct them to see the instructor.
- Except as described above, all work in this class is
covered by the School of Engineering's Honor Code statement on
plagiarism. It is plagiarism "to knowingly deceive, copy,
paraphrase, or otherwise misrepresent your work in a manner
inconsistent with professional conduct".
The grading scale for this class is A [90..100], B [80..90), C [70..80),
D [60..70), and F [0..60).
Two-thirds of the semester grade will come from the exam average and
one-third from the homework assignment/project average.
Assignments and Projects
- All students are expected to study the relevant portions of the
textbook and handouts in conjunction with our class discussions (i.e.,
before coming to class). Explicit reading assignments will
not always be given.
- Approximately seven homework assignments are planned for the
semester. Some of the assignments may be called "projects" and have
more credit than the "regular" assignments.
- Unless otherwise stated in the assignment description, an
assignment is to be carried out by each individual student without
inappropriate collaboration with others. See the section on
- One or more of the assignments will involve use of mathematical
techniques to prove programming "laws" or "synthesize" a program or
involve other problem-solving activities. In preparing and submitting
these homework papers make sure that:
- your name, the course number or name, the assignment identifier,
and individual exercises are clearly marked on the paper. (If it is a
group assignment, give the group identifier and the names of all
- you write legibly on only one side of the paper in a black or
blue pen or dark pencil. Do NOT use red or green ink! Some of the
assignments may require that materials be generated with a word
processor and/or other tools.
- your pages are stapled together in the upper left corner when
viewed from the front.
- Several programs will be assigned during the semester. We will
use the functional language Haskell 98.
For these exercises, you will need to submit appropriate design
documentation, a listing of your program code, and appropriate printed
output from your program testing. Make sure that you clearly label
the assignment as described above.
- As appropriate, there may be a few in-class assignments or quizzes
that count toward the assignment/project portion of the grade.
- The programs and other assignments given to students enrolled in
the course for graduate credit will often differ from the ones given
to undergraduates. In particular, the assignments will often include
components that are required for graduate students but optional for
- All students are expected to complete their homework assignments
by their due dates. If an assignment is submitted late, a
penalty of 10 percent of that assignment's grade will
be assessed for each day it is late. A homework
paper will not be accepted after graded papers have been
returned, after a solution has been distributed, or after the final
- There will be three examinations; the third examination is
- The examination portion of the semester grade will be calculated
by averaging the two best examination grades.
- The first examination will be given in mid-to-late February.
- The second examination will be given in mid-April.
- The third examination will be given during the final
examination period. Please do not ask to take the final examination
earlier than the time set for the entire class.
- Each exam will cover all topics studied to that point.
- Each exam may consist of a combination of in-class and take-home
- If you cannot take an examination at the scheduled time because
of an illness or other special circumstances, please notify
Prof. Cunningham in advance. Without advance notification, it may not
be possible to give a make-up examination.
UP to CSCI 555 root document?
Copyright © 2001, H. Conrad Cunningham
Last modified: Sat Jan 6 20:57:45 2001