CSci 555: Functional Programming
Spring Semester 2007
Syllabus
Locations
The spring semester 2007 class meets in 235 Weir
Hall at 8:00 a.m. to 9:15 a.m. on
Tuesdays and Thursdays.
The class is taught by Prof. Conrad Cunningham, whose
office is in 203 Weir Hall. The official office
hours for this class are Wednesday from 1:00 p.m. until 3:00 p.m. 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 http://www.cs.olemiss.edu/~hcc/
and his email address is cunningham AT cs DOT olemiss
DOT edu.
The WWW home page for this class is
http://www.cs.olemiss.edu/~hcc/csci555/
.
The final examination for this class is scheduled for Thursday,
May 10, at 8:00 a.m.
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."
Course Objectives
Upon completion of the course, the students should (1) know the
concepts and terminology of the functional programming paradigm, (2)
be able to solve problems by writing programs in the purely
functional, lazily evaluated programming language Haskell, and (3) be
able to reason about and manipulate Haskell programs mathematically.
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
transformation.
Prerequisites
Senior or graduate standing in computer science.
Anyone who does not have a mature understanding of programming in
an imperative language (e.g., Java, C/C++, or Pascal), 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.
Source Materials
- Textbook:
- Simon Thompson.
Haskell: The Craft of Functional Programming, SECOND
EDITION. Addison Wesley, 1999. ISBN: 0-201-34275-8.
- Notes:
- H. Conrad Cunningham.
Notes on Functional Programming with Haskell.
Technical Report UMCIS-1995-01.
Note: Gofer is an earlier name for the Hugs interpreter used this
semester. This document may be partially revised during the semester.
- Software:
- Most or all of the examples or assignments
will use the HUGS Interpreter for the language Haskell 98. The system
was originally developed by Mark P. Jones, now of the Oregon Graduate
Institute. See the Website
http://www.haskell.org/hugs for the available downloads.
Hugs is available on the Windows-based Adler Lab systems and on the
Linux-based server Turing.
Some of the assignments may also use the Glasgow Haskell
Compiler GHC. GHC is available on the Linux server Turing.
- Documentation:
- See the the Hugs website
http://www.haskell.org/hugs
and Haskell website
http://www.haskell.org for
users' manuals, tutorials, and other documentation on Hugs and
Haskell.
- Readings:
- Various journal and conference articles, research reports,
and book excerpts as appropriate.
Course Topics
- Functional programming concepts. (3 hours)
- Introduction to Haskell. First-order functions. Data types. (9 hours)
- Higher-order functions. (9 hours)
- List comprehensions. (1 hour)
- User-defined data types. Trees. (3 hours)
- Programming laws. Program synthesis techniques. (6 hours)
- Monads and purely functional input/output. (2 hours)
- Interpretation techniques. Program efficiency. (3 hours)
- Type Classes. Modules. Abstract data types. (3 hours)
- Infinite data structures. (2 hours)
- Exams (3 hours)
Professional Conduct
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
Technology
Appropriate Use Policy, the M Book, and any other
relevant policies.
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
following guidelines:
- 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".
Grading
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
- Students taking the course for undergraduate credit may have
slightly different assignments in some cases.
- 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
Professional Conduct.
- 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
members.)
- 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.
You will also be asked to submit your program source code in
electronic form using Blackboard.
- 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
undergraduates.
- 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
examination.
Examinations
- There will be three examinations, including the final. The final
examination is optional and can replace one of the other examinations.
- The examination portion of the semester grade will be calculated
by averaging the two best examination grades.
- The two mid-term exams will be spaced more or less evening
through the semester.
- The final 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
components.
- 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 © 2007, H. Conrad Cunningham
Last modified: Mon 15 Jan 2007.