Teaching
 
 
Functional Programming (IT2105) - Expires Spring 2007
 
The List Processing Language LISP was invented in the late 1950's in response to artificial intelligence (AI) researchers who needed a language to efficiently process complex lists of symbols. Since these symbol lists can represent either data or other programs, LISP offers the ability to write programs that can create and modify other programs, a key prerequisite to many AI endeavors. Now, over 40 years since LISP's invention, the ANSI-standard LISP, known as Common LISP (CL), is still one of the most popular AI programming languages. This makes LISP the second oldest programming language (next to FORTRAN) still in widespread use.
The ease of procedural and data abstraction combined with the strength of its macro-writing facilities (this applies to some extent also to Scheme) makes LISP an ideal language for both
    •    writing extensive libraries of general-purpose routines using user-tailored syntax,
    •    writing complete new languages on top of LISP.
 
LISP's simple syntax and weak typing, combined with friendly development environments (supporting features such as command-line interpretation and piecewise compilation), make it one of the most general and effective rapid prototyping languages - both in and outside of AI. In addition, the Common LISP Object System (CLOS; Scheme has its own OS, the SOS) enhances LISP with all the benefits of object-oriented programming (OOP).
This course will provide an introduction to functional programming in LISP. To take advantage of one of the finest LISP (and Computer Science) books ever written, "The Structure and Interpretation of Computer Programs", this course will use Scheme instead of CL. Although most of the same principles apply across all LISPs, Scheme is particularly well suited for education in functional programming.
Through plenty of hands-on programming experience, students will learn LISP's basic syntax and gain a strong appreciation for the power of recursion, procedural and data abstraction, and functional programming in general.
The end