Newsgroups: comp.lang.functional,comp.answers,news.answers Path: bloom-beacon.mit.edu!news.media.mit.edu!uhog.mit.edu!MathWorks.Com!yeshua.marcam.com!zip.eecs.umich.edu!newsxfer.itd.umich.edu!gumby!yale!cs.yale.edu!news From: jones-mark@CS.YALE.EDU (Mark P. Jones) Subject: comp.lang.functional Frequently Asked Questions (monthly posting) Message-ID: <1994Apr14.173241.21267@cs.yale.edu> Followup-To: comp.lang.functional Summary: This posting contains a list of frequently asked questions (and their answers) about functional programming languages and their implementations. Sender: news@cs.yale.edu (Usenet News) Nntp-Posting-Host: chickadee.systemsz.cs.yale.edu Organization: Yale University, Department of Computer Science, New Haven, CT Date: Thu, 14 Apr 1994 17:32:41 GMT Approved: news-answers-request@MIT.Edu Lines: 926 Xref: bloom-beacon.mit.edu comp.lang.functional:2292 comp.answers:4906 news.answers:18052 Archive-name: func-lang-faq Last-modified: April 14, 1994 --------------------------------------------------------------------------- A Frequently Asked Questions list (FAQ) for comp.lang.functional --------------------------------------------------------------------------- A copy of this FAQ is available by anonymous ftp from nebula.cs.yale.edu in the file pub/comp.lang.functional/FAQ. --------------------------------------------------------------------------- New this month: - Information about NESL - A new section in response to the recent threads on `purity and the FAQ'. --------------------------------------------------------------------------- TABLE OF CONTENTS: 1) GENERAL QUESTIONS 1.1) What is a functional language? 1.2) Where can I find out more about the history and motivation for functional programming? 1.3) Are there any books about functional programming? 1.4) Where is a good place to look for information about current research in functional languages? 1.5) What other newsgroups might be of interest to readers of comp.lang.functional? 1.6) Is comp.lang.functional archived anywhere? 2) FREQUENT TOPICS OF DISCUSSION: 2.1) What is a monad? 2.2) How can I write a parser in a functional language? 2.3) What does it mean to say that a language is strict/non-strict? 2.4) What about the performance of functional programs? 2.5) What is a purely functional language? 2.6) Other subjects: 3) LANGUAGE IMPLEMENTATIONS: ASpecT, Caml Light, Clean, Erlang, FP, Gofer, Haskell, Hope, Id, IFP, J, Miranda(TM), ML, NESL, OPAL, Scheme and Sisal. 4) OTHER RESOURCES: 4.1) Bibliographies: 4.2) Translators: 4.3) Online services: 5) CREDITS AND DISCLAIMERS: --------------------------------------------------------------------------- 1) GENERAL QUESTIONS: Comp.lang.functional is an unmoderated usenet newsgroup for the discussion of functional programming languages, including their design, application, theoretical foundation and implementation. --------- 1.1) What is a functional language? Opinions differ, even within the functional programming community, on the precise definition of ``functional programming languages''. Here is a definition that, broadly speaking, represents the kind of languages that are discussed in this newsgroup: Functional programming is a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these language are formed by using functions to combine basic values. A functional language is a language that supports and encourages programming in a functional style. For example, consider the task of calculating the sum of the integers from 1 to 10. In an imperative language, this might be expressed using a loop, repeatedly updating the values held in counter and accumulator variables: total = 0; for (i=1; i<=10; ++i) total += i; In a functional language, the same program would be expressed without any variable updates. For example, in Haskell or Miranda, the required sum can be calculated by evaluating the expression: sum [1..10]. Here, [1..10] is an expression that represents the list of integers from 1 to 10, while sum is a function that can be used to calculate the sum of an arbitrary list of values. The same idea could also be used in strict languages like ML or Scheme, but it is more common to find such programs written with an explicit loop, often expressed as a form of recursion. Nevertheless, there is still no need to update the values of the variables involved. SML: let fun sum i tot = if i=0 then tot else sum (i-1) (tot+i) in sum 10 0 end Scheme: (define sum (lambda (from total) (if (= 0 from) total (sum (- from 1) (+ total from))))) (sum 10 0) Of course, it is often possible to write programs in an imperative language using a functional style, and vice versa. It is then a matter of opinion whether a particular language can be described as functional or not. --------- 1.2) Where can I find out more about the history and motivation for functional programming? Here are a couple of references that should help: "Conception, Evolution, and Application of Functional Programming Languages", Paul Hudak, ACM Computing Surveys, Volume 21, Number 3, pp.359--411, 1989. "Why functional programming matters", John Hughes, The Computer Journal, Volume 32, Number 2, April 1989. --------- 1.3) Are there any books about functional programming? Yes, there are quite a few. For details about programming in a functional language: o "Introduction to functional programming", Richard Bird and Philip Wadler, Prentice Hall, 1988. ISBN 0-13-484189-1. o "ML for the working programmer", L.C. Paulson, Cambridge University Press, 1991. ISBN 0-521-39022-2. And for those with an interest in implementation: o "The implementation of functional programming languages", Simon Peyton Jones, Prentice Hall, 1987. ISBN 0-13-453333-X. o "Compiling with continuations", Andrew Appel, Cambridge University Press, 1992. ISBN 0-521-41695-7. For brevity, I've restricted myself to two books in each of the above categories, one concerned with non-strict languages, the other with strict languages. There are several other good books in each category. The following article may also be of interest to those looking for books about functional programming: o Simon Thompson, Comparative review of functional programming textbooks (Bailey, Bird and Wadler, Holyer, Paulson, Reade, Sokoloski, Wikstrom), Computing Reviews, May 1992 (CR number 9205-0262). --------- 1.4) Where is a good place to look for information about current research in functional languages? Here are some good places to start: Journals: o The Journal of Functional Programming, published by CUP. o Lisp and Symbolic Computation, published by Kluwer. Conference proceedings: o Lisp and Functional programming (LFP). o Functional Programming Languages and Computer Architecture (FPCA). o Principles of Programming Languages (POPL). o European Symposium on Programming (ESOP). (Most of these are published by the ACM press, or in the Springer Verlag Lecture Notes in Computer Science Series). --------- 1.5) What other newsgroups might be of interest to readers of comp.lang.functional? There are several newsgroups dealing with related languages and ideas, including: comp.lang.ml for discussion related to ML comp.lang.scheme for discussion about Scheme comp.lang.lisp for discussion about Lisp comp.lang.apl for discussion about APL, J, etc. --------- 1.6) Is comp.lang.functional archived anywhere? No, as far as I know, there is no public archive of comp.lang.functional (but, of course, many readers keep copies of old articles for their personal use). The possibility of establishing a public archive has been raised a number of times in the past but have not been pursued due to an apparent lack of interest, and concerns that archiving might discourage novices from posting articles. --------------------------------------------------------------------------- 2) FREQUENT TOPICS OF DISCUSSION: 2.1) What is a monad? --------------------- The concept of a monad comes from category theory; I'll spare you the full details since you can find these in standard text books on the subject. Much of the recent interest in monads in functional programming is the result of recent papers that show how monads can be used to describe all kinds of different programming language features -- for example, I/O, manipulation of state, continuations and exceptions -- in purely functional languages like Haskell. o Philip Wadler, Comprehending Monads (from the ACM conference on LISP & Functional Programming, Nice, France, 1990). o Philip Wadler, The Essence of Functional Programming (from ACM Principles of Programming Languages 1992). o Simon Peyton Jones and Philip Wadler, Imperative Functional Programming (from ACM Principles of Programming Languages 1993). These papers are essential reading for anyone interested in the use of monads for functional programming. Copies of these papers are currently available by anonymous ftp from ftp.dcs.glasgow.ac.uk in the subdirectory pub/glasgow-fp/papers. 2.2) How can I write a parser in a functional language? ------------------------------------------------------- A parser is a program that converts a list of input tokens, usually characters, into a value of the appropriate type. A simple example might be a function to find the integer value represented by a string of digits. A more complex example might be to translate programs written in a particular concrete syntax into a suitable abstract syntax as the first stage in the implementation of a compiler or interpreter. There are two common ways to write a parser in a functional language: o Using a parser generator tool. Some functional language implementations support tools that generate a parser automatically from a specification of the grammar (in much the same way that a C programmer uses yacc). Different tools are available, depending on the language and implementation used. o Using combinator parsing. Parsers are represented by functions and combined with a small set of combinators, leading to parsers that closely resemble the grammar of the language being read. Parsers written in this way can use backtracking. The techniques of combinator parsing have been known for quite some time. Two comparatively recent papers on the subject are: - "How to Replace Failure with a List of Successes", Philip Wadler, FPCA '85, Springer Verlag LNCS 201, 1985. - "Higher-order functions for parsing", Graham Hutton, Journal of Functional Programming, 2, 3, July 1992. The latter paper is also available by anonymous ftp from ftp.cs.chalmers.se in the file pub/cs-reports/papers/parsing.dvi and includes some references to other related papers. 2.3) What does it mean to say that a language is strict/non-strict? -------------------------------------------------------------------- Here's one (operational) way to explain the difference: In a strict language, the arguments to a function are always evaluated before it is invoked. As a result, if the evaluation of an expression exp does not terminate properly (for example, because it generates a run-time error or enters an infinite loop), then neither will an expression of the form f(exp). ML and Scheme are both examples of this. In a non-strict language, the arguments to a function are not evaluated until their values are actually required. For example, evaluating an expression of the form f(exp) may still terminate properly, even if evaluation of exp would not, if the value of the parameter is not used in the body of f. Miranda and Haskell are examples of this approach. It is possible to support a mixture of these two approaches; some versions of Hope do this. 2.4) What about the performance of functional programs? ------------------------------------------------------- In some circles, programs written in functional languages, have obtained a reputation for lack of performance. Part of this results from the high-level of abstraction that is common in such programs and from powerful features like higher-order functions, automatic storage management, etc. Of course, the performance of functional languages keeps improving with new developments in compiler technology. The paper below compares five current implementations of lazy functional languages: ``Benchmarking implementations of lazy functional languages'' P. H. Hartel and K. G. Langendoen FPCA 93, ACM, pp 341-349 (By ftp: ftp.fwi.uva.nl, directory pub/functional). Experiments with a heavily optimising compiler for Sisal, a strict functional language, show that functional programs can be faster than Fortran: ``Retire FORTRAN? A debate rekindled'' D. C. Cann, CACM, 35(8), pp. 81-89, Aug. 1992 2.5) What is a purely functional language? ------------------------------------------ This question has been the subject of some debate in recent messages posted to comp.lang.functional. It is widely agreed that languages like Haskell and Miranda are `purely functional', while SML and Scheme are not. However, there are some small differences of opinion about the precise technical motivation for this distinction. One definition that has been suggested is as follows: The term `purely functional language' is often used to describe languages which perform all their computations via function application. This is in contrast to languages, like Scheme and Standard ML, which are predominantly functional but also allow `side effects' (computational effects caused by expression evaluation which persist after the evaluation is completed). Sometimes, the term `purely functional' is also used in a broader sense to mean languages which might incorporate computational effects, but without altering the notion of `function' (as evidenced by the fact that the essential properties of functions are preserved.) Typically, the evaluation of an expression can yield a `task' which is then executed separately to cause computational effects. The evaluation and execution phases are separated in such a way that the evaluation phase does not compromise the standard properties of expressions and functions. The input/output mechanisms of Haskell, for example, are of this kind. 2.6) Other subjects: -------------------- There probably ought to be something here about programming with GUIs (Fudgets, eXene, etc.), Input/Output, General Foundations (basics of lambda calculus, perhaps?), and parallelism. Anybody want to write some brief comments addressing one/some of these? (Some sections are already in preparation.) --------------------------------------------------------------------------- 3) LANGUAGE IMPLEMENTATIONS: ASpecT: ASpecT is a strict functional language, developed at the University of Bremen, originally intended as an attempt to provide an implementation for (a subset of) Algebraic Specifications of Abstract Datatypes. The system was designed to be as user-friendly as possible, including overloading facilities and a source-level debugger. Efficiency called for call-by-value evaluation and reference counting memory management. Over the years more and more features were added, including subsorting, functionals and restricted polymorphism. The ASpecT compiler translates the functional source code to C, resulting in fast and efficient binaries. The most important application of ASpecT to date is the interactive graph visualization system daVinci; currently (Oct '93), version 1.2 is composed of 23.000 lines of code. For more information please contact the project daVinci by e-mail: daVinci@Informatik.Uni-Bremen.DE ASpecT is available by anonymous FTP from wowbagger.PC-Labor.Uni-Bremen.DE in the directory /pub/lang/ASpecT. ASpecT has been ported to many , NeXT, Apple A/UX, PC (OS/2, Linux), Amiga and Atari ST/TT. Caml Light: Caml Light is an implementation of the ML language that does not comply to the Standard, but is distinguished by its small size, modest memory requirements, availability on microcomputers, simple separate compilation, interface with C, and portable graphics functions. Caml Light 0.6 runs on most Unix machines, on the Macintosh and on PCs under MSDOS. ftp: ftp.inria.fr, directory lang/caml-light Clean: The Concurrent Clean system is a programming environment for the functional language Concurrent Clean, developed at the University of Nijmegen, The Netherlands. The system is one of the fastest implementations of functional languages available at the moment. Its I/O libraries make it possible to do modern, yet purely functional I/O (including windows, menus, dialogs etc.) in Concurrent Clean. With the Concurrent Clean system it is possible to develop real-life applications in a purely functional language. Particular features include: o lazy and purely functional o strongly typed - based on Milner/Mycroft scheme o module structure o modern I/O o programmer-influenced evaluation order by annotations ftp: host ftp.cs.kun.nl, directory pub/Clean available for: Mac, Sun 3, Sun 4 There is a book describing Concurrent Clean and its implementation on sequential and parallel architectures: "Functional Programming and Parallel Graph Rewriting", Rinus Plasmeijer and Marko van Eekelen, Addison Wesley, International Computer Science Series. Hardcover, 571 pages. ISBN 0-201-41663-8 Erlang: Concurrent functional programming language for large industrial real-time systems. Untyped. Pattern matching syntax. Recursion equations. Explicit concurrency, asynchronous message passing. Relatively free from side effects. Transparent cross-platform distribution. Primitives for detecting run-time errors. Real-time GC. Modules. Dynamic code replacement (change code in running real-time system, without stopping system). Foreign language interface. Availability: Free version (subject to non-commercial license) with no support. Commercial versions with support are available (Erlang Systems AB). Info: erlang@erix.ericsson.se FTP Info: euagate.eua.ericsson.se:/pub/eua/erlang/info See also: "Concurrent Programming in Erlang", J. Armstrong, M. Williams & R. Virding, Prentice Hall, 1993. ISBN 13-285792-8. FP: Backus' side-effect free, combinator style language described by: "Can Programming be Liberated from the Von Neumann Style?", J. Backus, Communications of the ACM, 21, 8, pp.613-641, 1978. There are (at least) three easily accessible implementations of FP. Two of these are available from any site that archives comp.sources.unix. For example, at gatekeeper.dec.com you will find these in: pub/usenet/comp.sources.unix/volume13/funcproglang pub/usenet/comp.sources.unix/volume20/fpc The first of these is an interpreter, the second a translator from FP to C. The third implementation, IFP is described separately below. Gofer: The Gofer system provides an interpreter for a small language based closely on the current version of the Haskell report. In particular, Gofer supports lazy evaluation, higher-order functions, polymorphic typing, pattern-matching, support for overloading, etc. ftp: nebula.cs.yale.edu, directory: pub/haskell/gofer Gofer runs on a wide range of machines including PCs, Ataris, Amigas, etc. as well as larger Unix-based systems. A version for the Apple Macintosh has been produced and is available by anonymous ftp from ftp.dcs.glasgow.ac.uk in a subdirectory of pub/haskell/gofer. Please note the spelling, derived from the notion that functional languages are GOod For Equational Reasoning. This is not to be confused with `Gopher', the widely used Internet distributed information delivery system! Haskell: In the mid-1980s, there was no "standard" non-strict, purely-functional programming language. A language-design committee was set up in 1987, and the Haskell language is the result. The Haskell committee released its report on 1 April 1990. A revised "Version 1.2" appeared in SIGPLAN Notices 27(5) (May 1992), along with a tutorial on Haskell by Hudak and Fasel. At the time of writing, there are three different Haskell systems available, developed by groups at Chalmers, Glasgow and Yale (several others are being developed). These systems are available from the following sites: Chalmers ftp.cs.chalmers.se Glasgow ftp.dcs.glasgow.ac.uk Yale nebula.cs.yale.edu At each site, all of the files related to Haskell are stored in the directory pub/haskell. Specialized material, or recent releases of these systems may sometimes only be available from the systems ``home site''. Machine-readable versions of the Haskell report, tutorials, and some programs are also available at these sites. A description of the current status of the various Haskell implementations is occasionally posted on the Haskell mailing list, and sometimes on comp.lang.functional. Copies of this document are often kept on the Haskell sites mentioned above. For example, this information may be found in pub/haskell/papers/Haskell.status at the Yale site (nebula.cs.yale.edu). Hope: A small polymorphically-typed functional language. First language to use call-by-pattern. Hope was originally strict, but there are versions with lazy lists, or with lazy constructors but strict functions. A fully lazy interpreter is available from: ftp: santos.doc.ic.ac.uk:/pub/papers/R.Paterson/hope.tar.Z Id: The core of Id is a non-strict functional language with implicit parallelism. It has the usual features of many modern functional languages, including a Hindley/Milner type inference system, algebraic types and definitions with clauses and pattern matching, and list comprehensions. IFP: The Illinois FP system is a modified version of Backus' FP with a more Algol-like syntax and structure. Described in: "The Illinois Functional Programming Interpreter", Arch D. Robison, Proceedings of the SIGPLAN '87 Symposium on Interpreters and Interpretive Techniques, SIGPLAN notices vol 22, no 7, July 1987. ftp: a.cs.uiuc.edu. versions for Unix and MSDOS J: J was designed and developed by Ken Iverson and Roger Hui. It is similar to the language APL, departing from APL in using using the ASCII alphabet exclusively, but employing a spelling scheme that retains the advantages of the special alphabet required by APL. It has added features and control structures that extend its power beyond standard APL. Although it can be used as a conventional procedural programming language, it can also be used as a pure functional programming language. ftp: watserv1.waterloo.edu. Miranda(TM): Miranda was designed in 1985-6 by David Turner with the aim of providing a standard non-strict purely functional language. It is described in D. A. Turner ``Miranda: A Non-Strict Functional Language with Polymorphic Types'', Proceedings FPLCA, Nancy, France, September 1985 (Springer LNCS vol 201, pp 1-16) and D. A. Turner ``An Overview of Miranda'', SIGPLAN Notices, vol 21, no 12, pp 158-166 (December 1986). Miranda was the first widely disseminated language with non-strict semantics and polymorphic strong typing, and is now running at over 600 sites, including 250 universities. It is widely used for teaching, often in conjunction with "Introduction to Functional Programming", by Bird & Wadler, which uses a notation closely based on Miranda. It has also had a strong influence on the subsequent development of the field and provided one of the main inputs for the design of the later language Haskell (see separate entry). Miranda was awarded a medal for technical achievement Computer Society (BCS Awards, 1990). The Miranda system is a commercial product of Research Software Limited. Miranda release two (the current version) supports unbounded precision integers and has a module system with provision for parameterized modules and a built in "make" facility. The compiler works in conjunction with a screen editor and programs are automatically recompiled after edits. There is an online reference manual. Note that the word "Miranda" is a trademark (TM) of Research Software Limited. There are no public domain versions of Miranda. Further information about Miranda may be obtained from mira-request@ukc.ac.uk or Research Software Ltd 23 St Augustines Road Canterbury CT1 1XP phone: (+44) 227 471844 ENGLAND fax: (+44) 227 454458 ML: ML (which stands for Meta-Language) is a family of advanced programming languages with [usually] functional control structures, strict semantics, a strict polymorphic type system, and parameterized modules. It includes Standard ML, Lazy ML, CAML, CAML Light, and various research languages. Implementations are available on many platforms, including PCs, mainframes, most models of workstation, multi-processors and supercomputers. ML has many thousands of users, is taught at many universities (and is the first programming language taught at some). There is a moderated usenet newsgroup, comp.lang.ml, for the discussion of topics related to ML. A list of frequently asked questions for ML is posted to this group each month by the moderator, Greg Morrisett. The first paragraph above is taken directly from this FAQ. There are several implementations of ML including Poly/ML, SML/NJ, PoplogML, Edinburgh, ANU ML, Micro ML, sml2c, Caml Light, and the ML kit. Further details for each of these systems are included in the comp.lang.ml FAQ. The Standard ML language is formally defined by: "The Definition of Standard ML", Robin Milner, Mads Tofte and Robert Harper, MIT, 1990. ISBN: 0-262-63132-6 "Commentary on Standard ML", Robin Milner and Mads Tofte, MIT, 1991 ISBN: 0-262-63137-7 There are a number of texts describing programming in ML. Again, full details are given in the comp.lang.ml FAQ. NESL: NESL is a fine-grained, functional, nested data-parallel language. The current implementation runs on workstations, the Connection Machines CM2 and CM5, the Cray Y-MP and the MasPar MP2. NESL is loosely based on ML. It includes a built-in parallel data-type, sequences, and parallel operations on sequences (the element type of a sequence can be any type, not just scalars). It is based on eager evaluation, and supports polymorphism, type inference and a limited use of higher-order functions. Currently it does not have support for modules and its datatype definition is limited. Except for I/O and some system utilities it is purely functional (it does not support reference cells or call/cc). The compiler is based on delayed compilation and compiles separate code for each type a function is used with (compiled code is monomorphic). The implementation therefore requires no type bits, and can do some important data-layout optimizations (e.g. double-precision floats don't need to be boxed, and nested sequences can be laid out efficiently across multiple processors). For several small benchmark applications on irregular and/or dynamic data (e.g graphs and sparse matrices) it generates code comparable in efficiency to machine-specific low-level code (e.g. Fortran or C). The system is available via anonymous FTP to nesl.scandal.cs.cmu.edu (currently 128.2.222.128), in the file code/nesl/nesl.tar.Z (1.2Mbytes). There is a README file in the nesl directory that contains further information. You can be added to the NESL mailing list by sending e-mail to nesl-request@cs.cmu.edu. The examples and documentation are also available separately. OPAL: The language OPAL has been designed as a testbed for the development of functional programs. Opal molds concepts from Algebraic Specification and Functional Programming, which shall favor the (formal) development of (large) production-quality software that is written in a purely functional style. The core of OPAL is a strongly typed, higher-order, strict applicative language which belongs to the tradition of HOPE and ML. The algebraic flavour of OPAL shows up in the syntactical appearance and the preference of parameterization to polymorphism. OPAL is used for research on the highly optimizing compilation of applicative languages. This has resulted in a compiler which produces very efficient code. The OPAL compiler itself is entirely written in OPAL. Papers describing OPAL, and the OPAL compilation system itself, are available by anonymous ftp from: ftp.cs.tu-berlin.de This includes an overview of OPAL in the file: pub/local/uebb/papers/DesignImplOpal.ps.gz A language tutorial: pub/local/uebb/papers/TutorialOpal.ps.gz The compilation system is in the pub/local/uebb/ocs directory. Installation is straightforward and has been successfully performed for SPARCs, DECstations, NeXTs, and PCs running LINUX. Scheme: Scheme is a dialect of Lisp that stresses conceptual elegance and simplicity. It is specified in R4RS and IEEE standard P1178. (See question [1-7] for details on standards for Scheme.) Scheme is much smaller than Common Lisp; the specification is about 50 pages. Scheme is often used in computer science curricula and programming language research, due to its ability to represent many programming abstractions with its simple primitives. There is an unmoderated usenet newsgroup, comp.lang.scheme for the discussion of topics related to Scheme, and a list of frequently asked questions for Scheme is posted to the group each month by Mark Kantrowitz. The FAQ list is also available online from several sources; for example, it can be obtained by anonymous ftp from ftp.think.com in the file /public/think/lisp/scheme-faq.text. There are many books and papers dealing with Scheme. Please consult the comp.lang.scheme frequently asked questions list for further details. The Scheme Repository, maintained by Ozan S. Yigit, is accessible by anonymous ftp at nexus.yorku.ca [130.63.9.66] in the directory pub/scheme/, and contains a Scheme bibliography, copies of the R4RS report, IEEE P1178 specification and other papers, sample Scheme code for a variety of purposes, several utilities, and some implementations. The repository is mirrored in INRIA, courtesy of Christian Queinnec [Ecole Polytechnique and INRIA-Rocquencourt], ftp.inria.fr:lang/Scheme. Sisal: Sisal (Streams and Iteration in a Single Assignment Language) is a functional language designed with several goals in mind: to support clear, efficient expression of scientific programs; to free application programmers from details irrelevant to their endeavors; and, to allow automatic detection and exploitation of the parallelism expressed in source programs. Sisal syntax is modern and easy to read; Sisal code looks similar to Pascal, Modula, or Ada, with modern constructs and long identifiers. The major difference between Sisal and more conventional languages is that it does not express explicit program control flow. Sisal semantics are mathematically sound. Programs consist of function definitions and invocations. Functions have no side effects, taking as inputs only explicitly passed arguments, and producing only explicitly returned results. There is no concept of state in Sisal. Identifiers are used, rather than variables, to denote values, rather than memory locations. The Sisal language currently exists for several shared memory and vector systems that run Berkeley mmetry, the Alliant, the Cray X/MP and Y/MP, Cray 2, and a few other less well-known ones. Sisal is available on sequential machines such as Sparc, RS/6000, and HP. Sisal also runs under MS-DOS and Macintosh Unix (A/UX). It's been shown to be fairly easy to port the entire language system to new machines. ftp: sisal.llnl.gov (128.115.19.65) For more information, pleases send an email request to: sisal-info-request@sisal.llnl.gov See also: "Retire FORTRAN? A debate rekindled", David Cann, CACM, 35(8), pp.81-89, Aug 1992 --------------------------------------------------------------------------- 4) OTHER RESOURCES: 4.1) Bibliographies: o Mike Joy maintains a bibliography on Functional Languages, in refer(1) format. It is available by anonymous ftp from: ftp.dcs.warwick.ac.uk in the files: pub/biblio/functional.README pub/biblio/functional.refer.Z o Tony Davie maintains a bibliography of over 2,600 papers, articles and books on functional programming and functional systems. It can be obtained by anonymous ftp from tamdhu.dcs.st-and.ac.uk in the directory pub/staple, either as a hypercard stack in pubs.sit.Hqx, or as a (compressed) text file in pubs.txt.Z. o Wolfgang Schreiner has compiled an annotated bibliography on parallel functional programming that lists more than 350 publications mostly including their *full abstracts*. You can retrieve the bibliography by anonymous ftp from ftp.risc.uni-linz.ac.at (193.170.36.100) in pub/reports/parlab/pfpbib2.dvi.Z (or pfpbib2.ps.Z). o State in Functional Programming: An Annotated Bibliography, edited by P. Hudak and D. Rabin, is available by anonymous ftp from nebula.cs.yale.edu in the files: pub/yale-fp/papers/state-bib.. where ::= ps | dvi :: = z | Z 4.2) Translators: o Miranda(TM) to LML and Miranda(TM) to Haskell translators written by Denis Howe are available by anonymous ftp from wombat.doc.ic.ac.uk (146.169.22.42) in directory pub, files mira2hs-1.05 and mira2lml-0.00 4.3) Online services: o If you have wais, the source is listed below, or it can be easily obtained from the directory-of-servers. If you don't have wais, subscribe to comp.infosystems.wais and find someone to ask. (:source :version 3 :ip-address "137.219.17.4" :ip-name "coral.cs.jcu.edu.au" :tcp-port 8000 :database-name "Func-Prog-Abstracts" :cost 0.00 :cost-unit :free :maintainer "farrell@coral.cs.jcu.edu.au" :description "Server created with WAIS release 8 b3.1 on Apr 22 19:06:25 1992 by farrell@coral.cs.jcu.edu.au Keywords: help intro introduction info information computer science technical reports functional programming This is a small collection of computer science technical reports, abstracts and papers gathered from ftp sites etc. all over the world. Due to space considerations, I am limiting it to functional programming, my area of interest, and papers produced by the department (which may or may not be related to functional programming). Comments, problems etc to the maintainer above. " ) o The Free On-Line Dictionary of Computing is available by Gopher and FTP from wombat.doc.ic.ac.uk. It is not restricted to functional programming but does include quite a few FP terms. --------------------------------------------------------------------------- 5) CREDITS AND DISCLAIMERS: The information in this article has been taken from public sources, mostly from articles posted on comp.lang.functional during the past eighteen months. This FAQ includes contributions from many different people -- because of the way that the FAQ was compiled, I regret to say that I do not have a complete list of contributors. The aim of this FAQ is to provide information about functional languages and to reflect widely held views in the functional programming community. Any opinions expressed in this message are those of the individual contributors, and may not be representative either of my own personal views, or of others in the community. It is very likely that this FAQ contains some significant errors and omissions: There are no guarantees for the accuracy of the information provided here. Of course, your corrections and contributions are encouraged! ---------------------------------------------------------------------------