I'd say there are several dimensions to consider.. 1) Assignments or not: Are there side effects to operators? Is it possible to directly store to memory locations or bind values to variables?
2) Combinators or not: Does application of a function involve named parameters, or are values curried into combinations of functions? 3) A presence of a typing system. To what extent can compiler can deduce correct usage of an object from context (without a lot of fuss declaring things) Lisp variants are mostly functional, with dialects like DSSSL Scheme being purely functional and dialects like R and Common Lisp generally facilitating it but not insisting on it. I mention Lisp because one of the first and most famous symbolic math packages, Macsyma is written in Lisp, as are simpler systems like JACAL. http://en.wikipedia.org/wiki/Macsyma http://maxima.sourceforge.net (Open source fork -- incidentally it can export TeX) http://www-swiss.ai.mit.edu/~jaffer/JACAL.html As I understand it, J has #1 and #2, but not much of #3. Haskell has all three. I think it safe to say that Haskell gets the most attention from academic researchers, but there are perhaps other functional languages that get broader or more intensive use in practice, e.g. ML, OCaml, Erlang. In most languages it is possible to implement function curries (#2) and make programs easier to follow or even faster (e.g. when iterating over set of things only passing the parameters that per the iteration and not all of the values they need to calculate each value). In GNU C, for example, there are nested functions, and packages like http://www.haible.de/bruno/documentation/ffcall/trampoline/trampoline.html will do the job. Here's an example of how it can be done in Scheme: http://www.engr.uconn.edu/~jeffm/Papers/curry.html However, for the purposes of expressing equations/calculations in a clear way, and making it easy to reason about those forms (either for a computer/compiler or a human), it's useful to pull them all together in a unified language as Haskell does (as do others like Mercury). And from a purely practical point of view, no more nasty stuff like memory alias identification as is needed in C, etc. ============================================================ FRIAM Applied Complexity Group listserv Meets Fridays 9a-11:30 at cafe at St. John's College lectures, archives, unsubscribe, maps at http://www.friam.org