A Collection of Papers on Functional Programming
compares a number of
programming languages in a prototyping experiment conducted by the US
Advanced Research Project Agency (ARPA) and others. Among the results:
The prototype required 83 lines of code and 10 hours of development
time when coded in Haskell. The figures for Ada were 767 lines / 23
hours, and for C++ 1105 lines. A graduate student who first got 8 days
to learn Haskell wrote a prototype in 8 hours!
[HJ94]
PostScript
describes a philosophy
of functional programming. Why should one use it? How can one use it
best? [Hug89]
PostScript
discusses
the advantages of functional programming and solves a non-trivial problem
very elegantly as an example. The problem is enumerating all the paraffins
(a certain kind of molecule). [Tur81]
Paul Hudak's slides from his keynote address to the USENIX DSL conference,
1997. Discusses embedding domain specific languages in Haskell, an idea very
close to programming with combinators.
A full paper by Hudak on the same
topic, from the International Conference
on Software Reuse 1998, including discussion of modular interpreters, the
role of partial evaluation, and so on.
explains the technique of `circular programming', in which the result
of a function is passed back to it as an argument. The technique enables some
programs which seem to need side-effects, such as back-patching generated
assembly code with label addresses, to be expressed efficiently without them.
It also depends crucially on lazy evaluation: if you understand this paper,
you'll understand laziness. [Bir84]
introduces a
method and a tool for observing the space use of functional
programs. Once you know where the space is used you can try to reduce
it. Includes an impressive example of the reduction obtained for a
medium-simple program. [RW93]
PostScript
New dimensions in heap profiling
develops the heap profiler by adding among other things `retainer profiling',
which answers the question `why isn't this data garbage collected?'. [RR94]
a tutorial on monads,
a tool for structuring functional programs, and a guide for designing
combinator libraries. Monads offer off-the-shelf solutions for modelling
many `non-functional' features, such as exceptions, state, back-tracking,
and jumps. Moreover `monadic' programs are easy to modify if new features are
needed at a later date. Monads are a relatively recent and very important development
in functional programming. [Wad93]
PostScript
a less tutorial
introduction to monads, which overlaps with the above, but goes further
by discussing continuations. Continuations enable functional programs
to simulate jumps, co-routines, multiple processes
etc. [Wad92]
PostScript
shows how monads can be
used to perform I/O and call C directly from Haskell, without losing Haskell's `functional'
properties. Implemented in the
Glasgow (sometimes known as `Glorious') Haskell
compiler. [Wad95]
PostScript
for years it was an open problem whether graph algorithms (e.g. strongly
connected components) could be expressed efficiently in functional languages.
This paper shows how they can. [KL95]
PostScript
a very well-known paper describing a
library of functions for simple graphics. The functions are used to
draw one of M.C. Escher's woodcuts. [Hen82]
describes a library of
functions for making simple animations, in the same spirit as `functional
geometry'. [Ary94]
another
example of designing a library, in this case for pretty-printing. The library
defines five combinators for constructing documents with alternative layouts, from which the `prettiest' is then
chosen. The combinators are specified formally and several alternative
implementations derived. [Hug95]
PostScript
References
- Ary94
-
Kavy Arya.
A functional animation starter-kit.
Journal of Functional Programming, 4(1):1--18, January 1994.
- Bir84
-
R. S. Bird.
Using Circular Programs to Eliminate Multiple Traverals of Data.
Acta Informatica, 21:239--250, 1984.
- Hen82
-
P. Henderson.
Functional geometry.
In Conference Record of the 1982 Symposium on LISP and
Functional Programming, Pittsburgh, PA, New York, NY, 1982. ACM.
- HJ94
-
Paul Hudak and Mark P. Jones.
Haskell vs. Ada Vs. C++ vs Awk vs ... An Experiment in Software
Prototyping Productivity.
Technical report, Yale, July 1994.
- Hug89
-
J. Hughes.
Why Functional Programming Matters.
Computer Journal, 32(2), 1989.
- Hug95
-
John Hughes.
The Design of a Pretty-printing Library.
In J. Jeuring and E. Meijer, editors, Advanced Functional
Programming, pages 53--96. Springer Verlag, LNCS 925, 1995.
- KL95
-
David King and John Launchbury.
Structuring Depth-First Search Algorithms in Haskell.
In Proceedings of the 22'nd Symposium on Principles of
Programming Languages, San Francisco, Jan 1995.
- RW93
-
Colin Runciman and David Wakeling.
Heap profiling of lazy functional programs.
Journal of Functional Programming, 3(2):217--245, April 1993.
- Tur81
-
D. A. Turner.
The Semantic Elegance of Applicative Languages.
In Proceedings 1981 Conference on Functional Languages and
Computer Architecture, Wentworth-by-the-Sea, Portsmouth, New Hampshire,
1981.
- Wad92
-
P. Wadler.
The essence of functional programming.
In Proceedings 1992 Symposium on principles of Programming
Languages, pages 1--14, Albuquerque, New Mexico, 1992.
- Wad93
-
P. Wadler.
Monads and functional programming.
In M. Broy, editor, Proceedings of the 1992 Marktoberdorf
international summer school on program design calculi. Springer Verlag,
1993.
- Wad95
-
Phil Wadler.
How to declare an imperative.
In Proceedings of the International Logic Programming
Symposium, 1995. MIT Press, December 1995.
Invited paper.
A Collection of Papers on Functional Programming
This document was generated using the LaTeX2HTML translator Version 95 (Thu Jan 19 1995) Copyright © 1993, 1994, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
The command line arguments were:
latex2html -no_navigation -split 0 overview.tex.
The translation was initiated by Magnus Carlsson on Tue Jan 9 14:12:16 MET 1996
Magnus Carlsson
Tue Jan 9 14:12:16 MET 1996