This is a course on functional programming.
As a course on programming, it emphasizes the analysis and solution of problems, the development of correct and efficient algorithms and data structures that embody the solutions, and the expression of the algorithms and data structures in a form suitable for processing by a computer. The focus is more on the human thought processes than on the computer execution processes.
As a course on functional programming, it approaches programming as the construction of definitions for (mathematical) functions and data structures. Functional programs consist of expressions that use these definitions. The execution of a functional program entails the evaluation of the expressions making up the program. Thus the course's focus is on problem solving techniques, algorithms, data structures, and programming notations appropriate for the functional approach.
This is not a course on functional programming languages. In particular, the course does not undertake an in-depth study of the techniques for implementing functional languages on computers. The focus is on the concepts for programming, not on the internal details of the technological artifact that executes the programs.
Of course, we want to be able to execute our functional programs on a computer and, moreover, to execute them efficiently. Thus we must become familiar with some concrete programming language and use an implementation of that language to execute our programs. To be able to analyze program efficiency, we must also become familiar with the basic techniques that are used to evaluate expressions. To be specific, this class will use a functional programming environment (i.e., an interpreter) called Hugs and the Glagow Haskell Compiler (GHC). The language accepted by these processors is the "lazy" functional programming language Haskell 98. The processors use a technique called graph reduction to evaluate the expressions in a program.
Being "practical" is not an overriding concern of this course. However, that does not mean this course is impractical. Many of the techniques of functional programming can be applied in more traditional languages. More importantly, any time programmers learn new approaches to problem solving and programming, they become better programmers. A course on functional programming provides a novel, interesting, and, probably at times, frustrating opportunity to learn more about the nature of the programming task.
UP to CSCI 555 root document?