
\section{Introduction}

     Lazy functional languages have not, to date, made an enormous
impact in scientific computing.  Partly, this has to do with
performance---codes written in these languages often run an order of
magnitude slower than imperative codes, which limits their appeal for
number-crunching production codes\footnote{It seems that this caveat on
functional programming no-longer holds for some non-lazy functional
language---see \cite{scientific3}.}.  Apart from that, there is a
suspicion that programming without assignments or side-effects is
difficult, or restrictive.  Evidently, this is not the opinion of
functional programmers---but perhaps there are things in scientific
computation which really cannot be {\em done} easily without assignments.

     In a recent article \cite{self} we have given detailed Haskell
implementations of three ``scientific'' algorithms.
Haskell is a relatively new language, put forward as
an international standard for functional programming
\cite{haskell1,haskell2,haskell3}.  It is a lazy, pure functional language.
In order of increasing complexity, the problems considered were:
solution of a partial differential
equation by the relaxation method; Monte Carlo simulation of a
statistical mechanics system; and a similar simulation of a lattice
gauge theory.  This report describes a simplified version of
the first of those programs.
(Other examples of scientific functional programming can be found in
\cite{scientific1,scientific2,scientific3}).

