CSci 555: Functional Programming
Fall Semester 2010
Syllabus


Locations

The Fall semester 2010 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 on Mondays and Wednesdays from 1:00 p.m. until 2:30 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 Tuesday, 7 December 2010 at at 8:00 a.m.


Student Disabilities 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 successful completion of the course, students:
  1. know and understand the fundamental concepts, techniques, and terminology of the functional programming paradigm, including functional abstraction, recursive functions, higher-order functions, lists, and user-defined types,
  2. know and understand the basic syntax, semantics, and pragmatics of the polymorphically statically typed, lazily evaluated, purely functional programming language Haskell,
  3. can analyze problems and apply functional programming concepts and techniques to develop appropriate Haskell programs to solve the problems,
  4. can evaluate alternative Haskell programs to determine which are better according to selected criteria,
  5. know and understand the basic features of Haskell monads and input/output,
  6. are 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

Either CSci 211 and Math 301 or graduate standing.

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:
Bryan O'Sullivan, John Goerzen, and Don Stewart. Real World Haskell, O'Reilly Media, 2009.
A free online version, licensed under a Creative Commons Attribution-Noncommercial 3.0 License, is available at http://book.realworldhaskell.org/.
Notes:
H. Conrad Cunningham. Notes on Functional Programming with Haskell. Technical Report UMCIS-1995-01 (2010 Revision)
Software:
The examples and assignments will use either the HUGS Interpreter for the language Haskell 98 or the Glasgow Haskell Compiler (GHC). See http://www.haskell.org.

Readings:
Various journal and conference articles, research reports, and book excerpts as appropriate.

Course Topics

  1. Functional programming concepts. (3 hours)
  2. Introduction to Haskell. First-order functions. Data types. (8 hours)
  3. Higher-order functions. (8 hours)
  4. List comprehensions. (1 hour)
  5. User-defined data types. Trees. (3 hours)
  6. Programming laws. Program synthesis techniques. (5 hours)
  7. Monads and purely functional input/output. (2 hours)
  8. Interpretation techniques. Program efficiency. (3 hours)
  9. Type Classes. Modules. Abstract data types. (3 hours)
  10. Infinite data structures. (1 hour)
  11. 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:


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


Examinations


UP to CSCI 555 root document?


Copyright © 2010, H. Conrad Cunningham
Last modified: Sat Jan 21 21:45:08 CST 2017