home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / faqs / comp / answers / func-lang-faq < prev    next >
Encoding:
Internet Message Format  |  1997-10-05  |  53.9 KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!spool.mu.edu!uwm.edu!vixen.cso.uiuc.edu!ais.net!newsfeed.internetmci.com!194.72.7.126!news-peer.bt.net!btnet!server2.netnews.ja.net!lboro.ac.uk!nott-cs!nott-cs!not-for-mail
  2. From: gmh@cs.nott.ac.uk (Graham M Hutton)
  3. Newsgroups: comp.lang.functional,comp.answers,news.answers
  4. Subject: comp.lang.functional Frequently Asked Questions (monthly posting)
  5. Supersedes: <5uds64$evk$1@passion.cs.nott.ac.uk>
  6. Followup-To: comp.lang.functional
  7. Date: 29 Sep 1997 16:14:19 +0100
  8. Organization: University of Nottingham, Department of Computer Science
  9. Lines: 1336
  10. Approved: news-answers-request@MIT.EDU
  11. Distribution: world
  12. Expires: Fri, 31 October 1997 18:00:00 GMT
  13. Message-ID: <60ogkb$lqs$1@marian.cs.nott.ac.uk>
  14. NNTP-Posting-Host: marian.cs.nott.ac.uk
  15. Summary: This document is a Frequently Asked Questions list (FAQ) for
  16.          comp.lang.functional, and provides brief answers to a number of
  17.          common questions concerning functional programming languages, and
  18.          some pointers to relevant literature and internet resources.
  19. Xref: senator-bedfellow.mit.edu comp.lang.functional:10307 comp.answers:28370 news.answers:113844
  20.  
  21. Archive-name: func-lang-faq
  22. Url: http://www.cs.nott.ac.uk/Department/Staff/gmh/faq.html
  23. Last-modified: October 1, 1997
  24.  
  25. ----------------------------------------------------------------------------
  26.  
  27.              Frequently Asked Questions for comp.lang.functional
  28.  
  29.                           Edited by Graham Hutton
  30.  
  31.                         Version of 1st October 1997
  32.  
  33.          1. This document                   5. Languages
  34.                                                  5.1. ASpecT
  35.          2. General topics                       5.2. Caml
  36.               2.1. Functional languages          5.3. Clean
  37.               2.2. History and motivation        5.4. Erlang
  38.               2.3. Textbooks                     5.5. FP
  39.               2.4. Journals and conferences      5.6. Gofer
  40.               2.5. Schools and workshops         5.7. Haskell
  41.               2.6. Education                     5.8. Hope
  42.                                                  5.9. Hugs
  43.          3. Technical topics                     5.10. Id
  44.               3.1. Purity                        5.11. J
  45.               3.2. Currying                      5.12. Miranda(TM)
  46.               3.3. Monads                        5.13. ML
  47.               3.4. Parsers                       5.14. NESL
  48.               3.5. Strictness                    5.15. OPAL
  49.               3.6. Performance                   5.16. Oz
  50.               3.7. Applications                  5.17. Pizza
  51.                                                  5.18. Scheme
  52.          4. Other resources                      5.19. Sisal
  53.               4.1. Web pages
  54.               4.2. Research groups
  55.               4.3. Newsgroups
  56.               4.4. Bibliographies
  57.               4.5. Translators
  58.  
  59. ----------------------------------------------------------------------------
  60.  
  61. New this month
  62.  
  63.    * Nothing new added this month.
  64.  
  65. ----------------------------------------------------------------------------
  66.  
  67. 1. This document
  68.  
  69. Comp.lang.functional is an unmoderated usenet newsgroup for the discussion
  70. of all aspects of functional programming languages, including their design,
  71. application, theoretical foundation, and implementation. Articles posted to
  72. this (and other) newsgroups are archived on the web at:
  73.  
  74.      http://www.dejanews.com/.
  75.  
  76. This document is a Frequently Asked Questions list (FAQ) for
  77. comp.lang.functional, and provides brief answers to a number of common
  78. questions concerning functional programming languages, and some pointers to
  79. relevant literature and internet resources.
  80.  
  81. The latest HTML version of this document is available on the web from:
  82.  
  83.      http://www.cs.nott.ac.uk/Department/Staff/gmh/faq.html.
  84.  
  85. Alternatively, a plain text version is available by ftp from:
  86.  
  87.       Host:      ftp.cs.nott.ac.uk;
  88.       Directory: nott-fp/comp.lang.functional.
  89.  
  90. Much of the information in this document has been taken from public sources,
  91. mostly from articles posted to comp.lang.functional. Because of the way that
  92. this document was compiled, a complete list of contributors is not
  93. available. Any opinions expressed in this document are those of the
  94. individual contributors, and may not be representative of views of the
  95. editor, or of others in the functional programming community. Every effort
  96. has been made to ensure that the content of this document is correct and
  97. up-to-date, but no guarantees are given for the accuracy of the information
  98. provided here. Your corrections and contributions are encouraged!
  99.  
  100. The original version of this Frequently Asked Questions list was compiled
  101. and edited by Mark P. Jones. All questions, comments, corrections, and
  102. suggestions regarding this document should be addressed to the current
  103. editor, Graham Hutton (email: gmh@cs.nott.ac.uk.)
  104.  
  105. ----------------------------------------------------------------------------
  106.  
  107. 2. General topics
  108.  
  109. This section gives brief answers to a number of general questions concerning
  110. functional programming languages, and some pointers to relevant literature
  111. and internet resources.
  112.  
  113. ----------------------------------------------------------------------------
  114.  
  115. 2.1. Functional languages
  116.  
  117. What is a "functional programming language"?
  118.  
  119. Opinions differ, even within the functional programming community, on the
  120. precise definition of what constitutes a functional programming language.
  121. However, here is a definition that, broadly speaking, represents the kind of
  122. languages that are discussed in comp.lang.functional:
  123.  
  124.      Functional programming is a style of programming that emphasizes
  125.      the evaluation of expressions, rather than execution of commands.
  126.      The expressions in these language are formed by using functions to
  127.      combine basic values. A functional language is a language that
  128.      supports and encourages programming in a functional style.
  129.  
  130. For example, consider the task of calculating the sum of the integers from 1
  131. to 10. In an imperative language such as C, this might be expressed using a
  132. simple loop, repeatedly updating the values held in an accumulator variable
  133. total and a counter variable i:
  134.  
  135.      total = 0;
  136.      for (i=1; i<=10; ++i)
  137.         total += i;
  138.  
  139. In a functional language, the same program would be expressed without any
  140. variable updates. For example, in Haskell, the result can be calculated by
  141. evaluating the expression:
  142.  
  143.      sum [1..10]
  144.  
  145. Here, [1..10] is an expression that represents the list of integers from 1
  146. to 10, while sum is a function that can be used to calculate the sum of an
  147. arbitrary list of values.
  148.  
  149. The same idea could also be used in (strict) functional languages such as
  150. SML or Scheme, but it is more common to find such programs written with an
  151. explicit loop, often expressed recursively. Nevertheless, there is still no
  152. need to update the values of the variables involved:
  153.  
  154. SML:
  155.  
  156.      let fun sum i tot = if i=0 then tot else sum (i-1) (tot+i)
  157.      in sum 10 0
  158.      end
  159.  
  160. Scheme:
  161.  
  162.      (define sum
  163.         (lambda (from total)
  164.             (if (= 0 from)
  165.                 total
  166.                 (sum (- from 1) (+ total from)))))
  167.      (sum 10 0)
  168.  
  169. It is often possible to write functional-style programs in an imperative
  170. language, and vice versa. It is then a matter of opinion whether a
  171. particular language can be described as functional or not.
  172.  
  173. ----------------------------------------------------------------------------
  174.  
  175. 2.2. History and motivation
  176.  
  177. Where can I find out more about the history and motivation for functional
  178. programming?
  179.  
  180. Here are two useful references:
  181.  
  182.    * "Conception, Evolution, and Application of Functional Programming
  183.      Languages", Paul Hudak, ACM Computing Surveys, Volume 21, Number 3,
  184.      pp.359-411, 1989.
  185.  
  186.    * "Why functional programming matters", John Hughes, The Computer
  187.      Journal, Volume 32, Number 2, April 1989. Available on the web from:
  188.  
  189.           http://www.cs.chalmers.se/~rjmh/Papers/whyfp.html.
  190.  
  191. ----------------------------------------------------------------------------
  192.  
  193. 2.3. Textbooks
  194.  
  195. Are there any textbooks about functional programming languages?
  196.  
  197. Yes, here are a selection:
  198.  
  199. Programming:
  200.  
  201.    * "Introduction to functional programming", Richard Bird and Philip
  202.      Wadler, Prentice Hall, 1988. ISBN 0-13-484189-1.
  203.  
  204.    * "ML for the working programmer", 2nd Edition, L.C. Paulson, Cambridge
  205.      University Press, 1996. ISBN 0-521-56543-X. Further information is
  206.      available on the web from:
  207.  
  208.           http://www.cl.cam.ac.uk/users/lcp/MLbook/.
  209.  
  210. Implementation:
  211.  
  212.    * "The implementation of functional programming languages", Simon Peyton
  213.      Jones, Prentice Hall, 1987. ISBN 0-13-453333-X.
  214.  
  215.    * "Compiling with continuations", Andrew Appel, Cambridge University
  216.      Press, 1992. ISBN 0-521-41695-7. Further information is available on
  217.      the web from:
  218.  
  219.           http://www.cup.org/Titles/416/0521416957.html.
  220.  
  221. The first book in each category above is concerned with non-strict
  222. languages, the second with strict languages. There are several other books
  223. available in each category. A comparison of a number of functional
  224. programming textbooks is made in the following article:
  225.  
  226.    * "Comparative review of functional programming textbooks (Bailey, Bird
  227.      and Wadler, Holyer, Paulson, Reade, Sokoloski, Wikstrom)", Simon
  228.      Thompson, Computing Reviews, May 1992 (CR number 9205-0262).
  229.  
  230. ----------------------------------------------------------------------------
  231.  
  232. 2.4. Journals and conferences
  233.  
  234. Are there any journals and conferences about functional programming?
  235.  
  236. Yes, here are a selection:
  237.  
  238. Journals:
  239.  
  240.    * The Journal of Functional Programming (JFP), published by Cambridge
  241.      University Press. Further information is available on the web from:
  242.  
  243.           http://www.dcs.gla.ac.uk/jfp/.
  244.  
  245.    * The Journal of Functional and Logic Programming (JFLP), an electronic
  246.      journal published by MIT Press, and available on the web from:
  247.  
  248.           http://www.cs.tu-berlin.de/journal/jflp/.
  249.  
  250.    * Lisp and Symbolic Computation, published by Kluwer.
  251.  
  252. Conferences:
  253.  
  254.    * Mathematics of Program Construction (MPC). Further information about
  255.      the most recent MPC conference (June 1998 at the time of writing) is
  256.      available on the web from:
  257.  
  258.           http://www.md.chalmers.se/Conf/MPC98/.
  259.  
  260.    * Principles of Programming Languages (POPL). Further information about
  261.      the most recent POPL conference (January 1998 at the time of writing)
  262.      is available on the web from:
  263.  
  264.           http://cm.bell-labs.com/cm/cs/who/dbm/POPL98/index.html.
  265.  
  266.    * The International Conference on Functional Programming (ICFP). This
  267.      conference combines and replaces the earlier conferences on Lisp and
  268.      Functional Programming (LFP), and Functional Programming Languages and
  269.      Computer Architecture (FPCA). Further information about the most recent
  270.      ICFP conference (June 1997 at the time of writing) is available on the
  271.      web from:
  272.  
  273.           http://www.wins.uva.nl/research/func/icfp97.html.
  274.  
  275.    * European Symposium on Programming (ESOP).
  276.  
  277. Most of these conferences have proceedings published by the ACM press, or in
  278. the Springer Verlag LNCS (Lecture Notes in Computer Science) series.
  279.  
  280. In addition to the above, Philip Wadler edits a column on functional
  281. programming for the Formal Aspects of Computer Science Newsletter, which is
  282. published by the British Computing Society Formal Aspects of Computing group
  283. and Formal Methods Europe.
  284.  
  285. ----------------------------------------------------------------------------
  286.  
  287. 2.5. Schools and workshops
  288.  
  289. Are there any schools and workshops on functional programming?
  290.  
  291. Yes, here are a selection:
  292.  
  293. Schools:
  294.  
  295.    * Spring School on Advanced Functional Programming Techniques, May 24-31,
  296.      1995, Baastad, Sweden. The proceedings of the school were published in
  297.      the Springer Verlag LNCS (Lecture Notes in Computer Science) series,
  298.      number 925.
  299.  
  300.    * The Second International Summer School on Advanced Functional
  301.      Programming Techniques, August 25-30, 1996, Washington, USA. The
  302.      proceedings of the school were published in the Springer Verlag LNCS
  303.      (Lecture Notes in Computer Science) series, number 1129. Further
  304.      information is available on the web from:
  305.  
  306.           http://www.cse.ogi.edu/PacSoft/summerschool96.html.
  307.  
  308. Workshops:
  309.  
  310.    * Since 1988 the Glasgow functional programming group has organised a
  311.      yearly workshop in Scotland. The workshops are attended by members of
  312.      the Glasgow group, as well as by guests from other universities and
  313.      commercial organisations. The proceedings of the workshops are
  314.      refereed, and most have been published by Springer Verlag in the
  315.      Workshops in Computing series. Further information is available on the
  316.      web from:
  317.  
  318.           http://www.dcs.gla.ac.uk/fp/workshops/.
  319.  
  320.    * The 9th International Workshop on the Implementation of Functional
  321.      Languages, Sept 10-12, 1997, St. Andrews, Scotland. Further information
  322.      is available on the web from:
  323.  
  324.           http://www.dcs.st-and.ac.uk/~ifl97.
  325.  
  326.    * The Haskell Workshop, June 7, 1997, Amsterdam, The Netherlands. Held is
  327.      conjunction with ICFP'97. Further information is available on the web
  328.      from:
  329.  
  330.           http://www.cse.ogi.edu/~jl/ACM/Haskell.html.
  331.  
  332.    * The 2nd Fuji International Workshop on Functional and Logic
  333.      Programming, November 1-4, 1996, Shonan Village, Japan. Further
  334.      information is available on the web from:
  335.  
  336.           http://www.kurims.kyoto-u.ac.jp/~ohori/fuji96.html.
  337.  
  338.    * The 1st Workshop on Functional Programming in Argentina, September 12,
  339.      1996, Buenos Aires, Argentina. Further information is available on the
  340.      web from:
  341.  
  342.           http://www-lifia.info.unlp.edu.ar/~lambda/first/english/.
  343.  
  344. ----------------------------------------------------------------------------
  345.  
  346. 2.6. Education
  347.  
  348. Are functional programming languages useful in education?
  349.  
  350. Functional languages are gathering momentum in education because they
  351. facilitate the expression of concepts and structures at a high level of
  352. abstraction. Many university computing science departments now make use of
  353. functional programming in their undergraduate courses; indeed, a number of
  354. departments teach a functional language as their first programming language.
  355. Further information about the use of functional programming languages in
  356. education (including links to relevant conferences and workshops) is
  357. available on the web from:
  358.  
  359.      http://www.cs.kun.nl/fple/.
  360.  
  361. ----------------------------------------------------------------------------
  362.  
  363. 3. Technical topics
  364.  
  365. This section gives brief answers to a number of technical questions
  366. concerning functional programming languages, and some pointers to relevant
  367. literature and internet resources.
  368.  
  369. ----------------------------------------------------------------------------
  370.  
  371. 3.1. Purity
  372.  
  373. What is a "purely functional" programming language?
  374.  
  375. This question has been the subject of some debate in the functional
  376. programming community. It is widely agreed that languages such as Haskell
  377. and Miranda are "purely functional", while SML and Scheme are not. However,
  378. there are some small differences of opinion about the precise technical
  379. motivation for this distinction. One definition that has been suggested is
  380. as follows:
  381.  
  382.      The term "purely functional" is often used to describe languages
  383.      that perform all their computations via function application. This
  384.      is in contrast to languages, such as Scheme and Standard ML, that
  385.      are predominantly functional but also allow `side effects'
  386.      (computational effects caused by expression evaluation that
  387.      persist after the evaluation is completed).
  388.  
  389.      Sometimes, the term "purely functional" is also used in a broader
  390.      sense to mean languages that might incorporate computational
  391.      effects, but without altering the notion of `function' (as
  392.      evidenced by the fact that the essential properties of functions
  393.      are preserved.) Typically, the evaluation of an expression can
  394.      yield a `task', which is then executed separately to cause
  395.      computational effects. The evaluation and execution phases are
  396.      separated in such a way that the evaluation phase does not
  397.      compromise the standard properties of expressions and functions.
  398.      The input/output mechanisms of Haskell, for example, are of this
  399.      kind.
  400.  
  401. ----------------------------------------------------------------------------
  402.  
  403. 3.2. Currying
  404.  
  405. What is "currying", and where does it come from?
  406.  
  407. Currying has its origins in the mathematical study of functions. It was
  408. observed by Frege in 1893 that it suffices to restrict attention to
  409. functions of a single argument. For example, for any two parameter function
  410. f(x,y), there is a one parameter function f' such that f'(x) is a function
  411. that can be applied to y to give (f'(x))(y) = f (x,y). This corresponds to
  412. the well known fact that the sets (AxB -> C) and (A -> (B -> C)) are
  413. isomorphic, where "x" is cartesian product and "->" is function space. In
  414. functional programming, function application is denoted by juxtaposition,
  415. and assumed to associate to the left, so that the equation above becomes f'
  416. x y = f(x,y).
  417.  
  418. Apparently, Frege did not pursue the idea further. It was rediscovered
  419. independently by Schoenfinkel, together with the result that all functions
  420. having to do with the structure of functions can be built up out of only two
  421. basic combinators, K and S. About a decade later, this sparked off the
  422. subject of combinatory logic, invented by Haskell Curry. The term "currying"
  423. honours him; the function f' in the example above is called the "curried"
  424. form of the function f. From a functional programming perspective, currying
  425. can be described by a function:
  426.  
  427.      curry : ((a,b) -> c) -> (a -> b -> c)
  428.  
  429. The inverse operation is, unsurprisingly, refered to as uncurrying:
  430.  
  431.      uncurry : (a -> b -> c) -> ((a,b) -> c)
  432.  
  433. For further reading, see:
  434.  
  435.    * "Highlights of the history of the lambda-calculus", J. Barkley Rosser,
  436.      ACM Lisp and Functional Programming, 1982.
  437.  
  438.    * "Ueber die Bausteine der mathematischen Logik", Moses Sch\"onfinkel,
  439.      Mathematische Annalen, 92, 1924. An English translation, "On the
  440.      building blocks of mathematical logic", appears in "From Frege to
  441.      G\"odel", Jean van Heijenoort, Harvard University Press, Cambridge,
  442.      1967.
  443.  
  444.    * "Combinatory logic", Haskell B. Curry and Robert Feys, North-Holland,
  445.      1958. This work also contains many references to earlier work by Curry,
  446.      Church, and others.
  447.  
  448. ----------------------------------------------------------------------------
  449.  
  450. 3.3. Monads
  451.  
  452. What is a "monad", and what are they used for?
  453.  
  454. The concept of a monad comes from category theory; full details can be found
  455. in any standard textbook on the subject. Much of the interest in monads in
  456. functional programming is the result of recent papers that show how monads
  457. can be used to describe all kinds of different programming language features
  458. (for example, I/O, manipulation of state, continuations and exceptions) in
  459. purely functional languages such as Haskell:
  460.  
  461.    * "Comprehending monads", Philip Wadler, Mathematical Structures in
  462.      Computer Science, Special issue of selected papers from 6th Conference
  463.      on Lisp and Functional Programming, 1992. Available on the web from:
  464.  
  465.           http://cm.bell-labs.com/cm/cs/who/wadler/papers/monads/monads.ps.gz
  466.  
  467.    * "The essence of functional programming", Philip Wadler, Invited talk,
  468.      19th Symposium on Principles of Programming Languages, ACM Press,
  469.      Albuquerque, January 1992. Available on the web from:
  470.  
  471.           http://cm.bell-labs.com/cm/cs/who/wadler/papers/essence/essence.ps.gz
  472.  
  473.    * "Imperative functional programming", Simon Peyton Jones and Philip
  474.      Wadler, 20th Symposium on Principles of Programming Languages, ACM
  475.      Press, Charlotte, North Carolina, January 1993. Available on the web
  476.      from:
  477.  
  478.           http://cm.bell-labs.com/cm/cs/who/wadler/papers/imperative/imperative.ps.gz.
  479.  
  480. ----------------------------------------------------------------------------
  481.  
  482. 3.4. Parsers
  483.  
  484. How can I write a "parser" in a functional programming language?
  485.  
  486. A parser is a program that converts a list of input tokens, usually
  487. characters, into a value of the appropriate type. A simple example might be
  488. a function to find the integer value represented by a string of digits. A
  489. more complex example might be to translate programs written in a particular
  490. concrete syntax into a suitable abstract syntax as the first stage in the
  491. implementation of a compiler or interpreter. There are two common ways to
  492. write a parser in a functional language:
  493.  
  494.    * Using a parser generator tool. Some functional language implementations
  495.      support tools that generate a parser automatically from a specification
  496.      of the grammar. See:
  497.  
  498.         o Happy: a parser generator system for Haskell and Gofer, similar to
  499.           the tool `yacc' for C. Available on the web from:
  500.  
  501.                http://www.dcs.gla.ac.uk/fp/software/happy/.
  502.  
  503.         o Ratatosk: a parser and scanner generator for Gofer. Available by
  504.           ftp from:
  505.  
  506.                 Host:      ftp.diku.dk;
  507.                 Directory: /pub/diku/dists.
  508.  
  509.         o ML-Yacc and ML-Lex: an LALR parser generator and a lexical
  510.           analyser generator for Standard ML. Included with SML/NJ,
  511.           available by ftp from:
  512.  
  513.                 Host:      ftp.research.bell-labs.com;
  514.                 Directory: /dist/smlnj.
  515.  
  516.    * Using combinator parsing. Parsers are represented by functions and
  517.      combined with a small set of combinators, leading to parsers that
  518.      closely resemble the grammar of the language being read. Parsers
  519.      written in this way can use backtracking. See:
  520.  
  521.         o "How to replace failure with a list of successes", Philip Wadler,
  522.           FPCA '85, Springer Verlag LNCS 201, 1985.
  523.  
  524.         o "Higher-order functions for parsing", Graham Hutton, Journal of
  525.           Functional Programming, Volume 2, Number 3, July 1992. Available
  526.           on the web from:
  527.  
  528.                http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#parsing.
  529.  
  530. ----------------------------------------------------------------------------
  531.  
  532. 3.5. Strictness
  533.  
  534. What does it mean to say that a functional programming language is "strict"
  535. or "non-strict"?
  536.  
  537. Here's one (operational) way to explain the difference:
  538.  
  539.    * In a strict language, the arguments to a function are always evaluated
  540.      before it is invoked. As a result, if the evaluation of an expression
  541.      exp does not terminate properly (for example, because it generates a
  542.      run-time error or enters an infinite loop), then neither will an
  543.      expression of the form f(exp). ML and Scheme are both examples of this.
  544.  
  545.    * In a non-strict language, the arguments to a function are not evaluated
  546.      until their values are actually required. For example, evaluating an
  547.      expression of the form f(exp) may still terminate properly, even if
  548.      evaluation of exp would not, if the value of the parameter is not used
  549.      in the body of f. Miranda and Haskell are examples of this approach.
  550.  
  551. There is much debate in the functional programming community about the
  552. relative merits of strict and non-strict languages. It is possible, however,
  553. to support a mixture of these two approaches; for example, some versions of
  554. the functional language Hope do this.
  555.  
  556. ----------------------------------------------------------------------------
  557.  
  558. 3.6. Performance
  559.  
  560. What is the performance of functional programs like?
  561.  
  562. In some circles, programs written in functional languages have obtained a
  563. reputation for lack of performance. Part of this results from the high-level
  564. of abstraction that is common in such programs and from powerful features
  565. such as higher-order functions, automatic storage management, etc. Of
  566. course, the performance of interpreters and compilers for functional
  567. languages keeps improving with new technological developments.
  568.  
  569. Here are a selection of references for further reading:
  570.  
  571.    * Over 25 implementations of different functional languages have been
  572.      compared using a single program, the "Pseudoknot" benchmark, which is a
  573.      floating-point intensive application taken from molecular biology. See:
  574.  
  575.         o "Benchmarking implementations of functional languages with
  576.           'Pseudoknot', a float-intensive benchmark", Pieter H. Hartel et
  577.           al, Journal of Functional Programming, 6(4):621-655, July 1996.
  578.           Available on the web from:
  579.  
  580.                ftp://ftp.fwi.uva.nl/pub/computer-systems/functional/reports/.
  581.  
  582.    * The paper below compares five implementations of lazy functional
  583.      languages:
  584.  
  585.         o "Benchmarking implementations of lazy functional languages", P.H.
  586.           Hartel and K.G. Langendoen, FPCA 93, ACM, pp 341-349. Available by
  587.           ftp from:
  588.  
  589.                 Host:      ftp.fwi.uva.nl;
  590.                 Directory: pub/functional/reports.
  591.  
  592.    * Experiments with a heavily optimising compiler for Sisal, a strict
  593.      functional language, show that functional programs can be faster than
  594.      Fortran. See:
  595.  
  596.         o "Retire FORTRAN? A debate rekindled", D.C. Cann, Communications of
  597.           the ACM, 35(8), pp. 81-89, August 1992.
  598.  
  599.    * Postscript versions of a number of papers from the 1995 conference on
  600.      High Performance Functional Computing (HPFC) are available on the web
  601.      from:
  602.  
  603.           ftp://sisal.llnl.gov/pub/hpfc/index.html.
  604.  
  605. ----------------------------------------------------------------------------
  606.  
  607. 3.7. Applications
  608.  
  609. Where can I find out about applications of functional programming?
  610.  
  611. Here are a selection of places to look:
  612.  
  613.    * "Special issue on state-of-the-art applications of pure functional
  614.      programming languages", edited by Pieter Hartel and Rinus Plasmeijer,
  615.      Journal of Functional Programming, Volume 5, Number 3, July 1995.
  616.  
  617.    * "Applications of functional programming", edited by Colin Runciman and
  618.      David Wakeling, UCL Press, 1995. ISBN 1-85728-377-5.
  619.  
  620.    * An online list of real-world applications of functional programming is
  621.      maintained, which includes programs written in several different
  622.      functional languages. The main criterion for being considered a
  623.      real-world application is that the program was written primarily to
  624.      perform some task, rather than to experiment with functional
  625.      programming.
  626.  
  627.      Further details are available on the web from:
  628.  
  629.           http://www.dcs.gla.ac.uk/fp/realworld.
  630.  
  631. ----------------------------------------------------------------------------
  632.  
  633. 4. Other resources
  634.  
  635. This section gives some pointers to other internet resources on functional
  636. programming.
  637.  
  638. ----------------------------------------------------------------------------
  639.  
  640. 4.1. Web pages
  641.  
  642.    * Philip Wadler's guide to functional programming on the web:
  643.  
  644.           http://cm.bell-labs.com/cm/cs/who/wadler/guide.html.
  645.  
  646.    * The SEL-HPC WWW functional programming archive:
  647.  
  648.           http://www.lpac.ac.uk/SEL-HPC/Articles/FuncArchive.html.
  649.  
  650.    * Jon Mountjoy's functional languages page:
  651.  
  652.           http://carol.fwi.uva.nl/~jon/func.html.
  653.  
  654. ----------------------------------------------------------------------------
  655.  
  656. 4.2. Research groups
  657.  
  658.    * The Chalmers functional programming group:
  659.  
  660.           http://www.md.chalmers.se/Cs/Research/Functional/.
  661.  
  662.    * The Glasgow functional programming group:
  663.  
  664.           http://www.dcs.gla.ac.uk/fp.
  665.  
  666.    * The Nottingham languages and programming group:
  667.  
  668.           http://www.cs.nott.ac.uk/Research/lap/index.html.
  669.  
  670.    * The St Andrews functional programming group:
  671.  
  672.           http://www.dcs.st-andrews.ac.uk/CompSci/Rsch/Functional/welcome.html.
  673.  
  674.    * The Yale functional programming group:
  675.  
  676.           http://www.cs.yale.edu/HTML/YALE/CS/haskell/yale-fp.html.
  677.  
  678.    * The York functional programming group:
  679.  
  680.           http://dcpu1.cs.york.ac.uk:6666/fpg/index.html.
  681.  
  682. ----------------------------------------------------------------------------
  683.  
  684. 4.3. Newsgroups
  685.  
  686.    * For discussion about ML:
  687.  
  688.           comp.lang.ml.
  689.  
  690.    * For discussion about Scheme:
  691.  
  692.           comp.lang.scheme.
  693.  
  694.    * For discussion about Lisp:
  695.  
  696.           comp.lang.lisp.
  697.  
  698.    * For discussion about APL, J, etc:
  699.  
  700.           comp.lang.apl.
  701.  
  702. ----------------------------------------------------------------------------
  703.  
  704. 4.4. Bibliographies
  705.  
  706.    * Mike Joy's bibliography on functional programming languages, in
  707.      refer(1) format:
  708.  
  709.            Host:      ftp.dcs.warwick.ac.uk;
  710.            Directory: /pub/biblio.
  711.  
  712.    * Tony Davie's bibliography of over 2,600 papers, articles and books on
  713.      functional programming, available as a text file or a hypercard stack
  714.      by ftp from:
  715.  
  716.            Host:      tamdhu.dcs.st-and.ac.uk;
  717.            Directory: /pub/staple.
  718.  
  719.    * "State in functional programming: an annotated bibliography", edited by
  720.      P. Hudak and D. Rabin, available as a dvi or postscript file by ftp
  721.      from:
  722.  
  723.            Host:      nebula.cs.yale.edu;
  724.            Directory: /pub/yale-fp/papers.
  725.  
  726.    * Wolfgang Schreiner's annotated bibliography of over 350 publications on
  727.      parallel functional programming (most with abstracts), available on the
  728.      web from:
  729.  
  730.           http://www.risc.uni-linz.ac.at/people/schreine/papers/pfpbib.ps.gz.
  731.  
  732. ----------------------------------------------------------------------------
  733.  
  734. 4.5. Translators
  735.  
  736.    * The smugweb system for typesetting Haskell code in TeX, available from:
  737.  
  738.           http://www.minet.uni-jena.de/~joe/smugweb.html.
  739.  
  740.    * The miratex package for typesetting Miranda(TM) code in TeX, available
  741.      from:
  742.  
  743.           http://www.cs.tcd.ie/www/jgllgher/miratex/index.html.
  744.  
  745.    * Denis Howe's translators from Miranda(TM) to LML and Haskell, available
  746.      from:
  747.  
  748.           http://wombat.doc.ic.ac.uk/pub/mira2lml;
  749.  
  750.           http://wombat.doc.ic.ac.uk/pub/mira2hs.
  751.  
  752. ----------------------------------------------------------------------------
  753.  
  754. 5. Languages
  755.  
  756. This section gives a brief overview of a number of programming languages
  757. that support aspects of the functional paradigm, and some pointers to
  758. relevant literature and internet resources. The table below classifies the
  759. languages into strict/non-strict and sequential/concurrent, and may be
  760. useful when searching for suitable languages for particular applications.
  761. Some of the languages have multiple versions with different classifications
  762. (see the language overviews for further details), but for simplicity only
  763. the most common version of each language is considered in the table.
  764.  
  765.                   Sequential:  Concurrent:
  766.       Strict:     ASpecT       Erlang
  767.                   Caml         NESL
  768.                   FP           Oz
  769.                   J            Pizza
  770.                   ML           Sisal
  771.                   OPAL
  772.                   Scheme
  773.       Non-strict: Gofer        Clean
  774.                   Haskell      Id
  775.                   Hope
  776.                   Hugs
  777.                   Miranda
  778.  
  779. ----------------------------------------------------------------------------
  780.  
  781. 5.1. ASpecT
  782.  
  783. ASpecT is a strict functional language, developed at the University of
  784. Bremen, originally intended as an attempt to provide an implementation for
  785. (a subset of) Algebraic Specifications of Abstract Datatypes. The system was
  786. designed to be as user-friendly as possible, including overloading
  787. facilities and a source-level debugger. For reasons of efficiency, the
  788. system uses call-by-value evaluation and reference counting memory
  789. management.
  790.  
  791. Over the years more and more features have been added, including subsorting,
  792. functionals, and restricted polymorphism. The ASpecT compiler translates the
  793. functional source code to C, resulting in fast and efficient binaries.
  794. ASpecT has been ported to many different platforms, including Sun3, Sun4,
  795. Dec VAX, IBM RS6000, NeXT, Apple A/UX, PC (OS/2, Linux), Amiga and Atari
  796. ST/TT. The ASpecT compiler is available by ftp from:
  797.  
  798.       Host:      ftp.Uni-Bremen.DE;
  799.       Directory: /pub/programming/languages/ASpecT.
  800.  
  801. The most important application of ASpecT to date is the interactive graph
  802. visualization system daVinci; currently (September '96), version 2.0.x is
  803. composed of 34.000 lines of ASpecT code, 12.000 lines of C code and 8000
  804. lines of Tcl/Tk code. daVinci is an X11 program, and is available for UNIX
  805. workstations from Sun, HP, IBM, DEC, SGI, and for Intel PCs with a UNIX
  806. operating system. Further information about daVinci is available on the web
  807. from:
  808.  
  809.      http://www.Informatik.Uni-Bremen.DE/~davinci.
  810.  
  811. ----------------------------------------------------------------------------
  812.  
  813. 5.2. Caml
  814.  
  815. Caml is a dialect of the ML language developed at INRIA that does not comply
  816. to the Standard, but actually tries to go beyond the Standard, in particular
  817. in the areas of separate compilation, modules, and objects. Two
  818. implementations of Caml are available:
  819.  
  820.    * The older implementation, Caml Light, is distinguished by its small
  821.      size, modest memory requirements, availability on microcomputers,
  822.      simple separate compilation, interface with C, and portable graphics
  823.      functions. It runs on most Unix machines, on the Macintosh and on PCs
  824.      under Ms Windows and MSDOS. The current version at the time of writing
  825.      is 0.71.
  826.  
  827.    * A more ambitious implementation, Objective Caml (formerly known as Caml
  828.      Special Light), is also available. It adds the following extensions to
  829.      Caml Light:
  830.  
  831.         o Full support for objects and classes, here combined for the first
  832.           time with ML-style type reconstruction;
  833.  
  834.         o A powerful module calculus in the style of Standard ML, but
  835.           providing better support for separate compilation;
  836.  
  837.         o A high-performance native code compiler, in addition to a Caml
  838.           Light-style bytecode compiler.
  839.  
  840.      Objective Caml is available for Unix and Windows 95/NT, with the
  841.      native-code compiler supporting the following processors: Alpha, Sparc,
  842.      Pentium, Mips, Power, HPPA.
  843.  
  844. Both implementations of Caml are available by ftp from:
  845.  
  846.       Host:      ftp.inria.fr;
  847.       Directory: /lang/caml-light.
  848.  
  849. Further information about Caml is available on the web from:
  850.  
  851.      http://pauillac.inria.fr/caml/index-eng.html (English);
  852.  
  853.      http://pauillac.inria.fr/caml/index-fra.html (French).
  854.  
  855. ----------------------------------------------------------------------------
  856.  
  857. 5.3. Clean
  858.  
  859. The Concurrent Clean system is a programming environment for the functional
  860. language Concurrent Clean, developed at the University of Nijmegen in The
  861. Netherlands. The system is one of the fastest implementations of functional
  862. languages available at the time of writing. Through the use of uniqueness
  863. typing, it is possible to write purely functional interactive programs,
  864. including windows, menus, dialogs, etc. It is also possible to develop
  865. real-life applications that interface with non-functional systems. With
  866. version 1.0, the language emerged from an intermediate language to a proper
  867. programming language. Features provided by the language include:
  868.  
  869.    * Lazy evaluation;
  870.    * Modern input/output;
  871.    * Annotations for parallelism;
  872.    * Automatic strictness analysis;
  873.    * Annotations for evaluation order;
  874.    * Inferred polymorphic uniqueness types;
  875.    * Records, mutable arrays, module structure;
  876.    * Existential types, type classes, constructor classes;
  877.    * Strong typing, based on the Milner/Mycroft scheme.
  878.  
  879. Concurrent Clean is available for Machintoshs (Motorola, PowerPC), PCs (OS2,
  880. Linux), and Sun4s (Solaris, SunOS). The system is available by ftp from:
  881.  
  882.       Host:      ftp.cs.kun.nl;
  883.       Directory: /pub/Clean.
  884.  
  885. Further information about Concurrent Clean is available on the web from:
  886.  
  887.      http://www.cs.kun.nl/~clean.
  888.  
  889. A book describing the background and implementation of Concurrent Clean is
  890. also available:
  891.  
  892.    * "Functional programming and parallel graph rewriting", Rinus Plasmeijer
  893.      and Marko van Eekelen, Addison Wesley, International Computer Science
  894.      Series. ISBN 0-201-41663-8
  895.  
  896. ----------------------------------------------------------------------------
  897.  
  898. 5.4. Erlang
  899.  
  900. Erlang is an untyped concurrent functional programming language for large
  901. industrial real-time systems. A free version of Erlang with no support is
  902. available to Universities subject to a non-commercial license. Commercial
  903. versions with support are also available.
  904.  
  905. Features of Erlang include:
  906.  
  907.    * Modules;
  908.    * Recursion equations;
  909.    * Explicit concurrency;
  910.    * Pattern matching syntax;
  911.    * Dynamic code replacement;
  912.    * Foreign language interface;
  913.    * Real-time garbage collection;
  914.    * Asynchronous message passing;
  915.    * Relative freedom from side effects;
  916.    * Transparent cross-platform distribution;
  917.    * Primitives for detecting run-time errors.
  918.  
  919. Further information about Erlang is available from:
  920.  
  921.       Email: erlang@cslab.ericsson.se;
  922.       Web:   http://www.ericsson.se/cslab/erlang/.
  923.  
  924. See also:
  925.  
  926.    * "Concurrent programming in Erlang" (second edition), J. Armstrong, M.
  927.      Williams, R. Virding, and Claes Wikstrm, Prentice Hall, 1996. ISBN
  928.      0-13-508301-X.
  929.  
  930. ----------------------------------------------------------------------------
  931.  
  932. 5.5. FP
  933.  
  934. FP is a side-effect free, combinator style language, described in:
  935.  
  936.    * "Can programming be liberated from the von Neumann style?", John
  937.      Backus, Communications of the ACM, 21, 8, pp.613-641, 1978.
  938.  
  939. A interpreter and a compiler (to C) for FP are available by ftp from:
  940.  
  941.       Host:      gatekeeper.dec.com;
  942.       Directory: pub/usenet/comp.sources.unix/volume13/funcproglang;
  943.       Directory: pub/usenet/comp.sources.unix/volume20/fpc.
  944.  
  945. The Illinois FP system supports a modified version of FP that has a more
  946. Algol-like syntax and structure, and is described in the following article:
  947.  
  948.    * "The Illinois functional programming interpreter", Arch D. Robison,
  949.      Proceedings of the SIGPLAN '87 Symposium on Interpreters and
  950.      Interpretive Techniques, SIGPLAN notices, Volume 22, Number 7, July
  951.      1987.
  952.  
  953. ----------------------------------------------------------------------------
  954.  
  955. 5.6. Gofer
  956.  
  957. The Gofer system provides an interpreter for a small language based closely
  958. on the current version of the Haskell report. In particular, Gofer supports
  959. lazy evaluation, higher-order functions, polymorphic typing,
  960. pattern-matching, support for overloading, etc.
  961.  
  962. The most recent version of Gofer, 2.30a, is available by ftp from:
  963.  
  964.       Host:      ftp.cs.nott.ac.uk;
  965.       Directory: /nott-fp/languages/gofer.
  966.  
  967. Gofer runs on a wide range of machines including PCs, Ataris, Amigas, etc.
  968. as well as larger Unix-based systems. A version for the Apple Macintosh is
  969. also available, by ftp from:
  970.  
  971.       Host:      ftp.dcs.glasgow.ac.uk;
  972.       Directory: /pub/haskell/gofer/macgofer.
  973.  
  974. Please note the spelling of Gofer, derived from the notion that functional
  975. languages are GO(od) F(or) E(quational) R(easoning). This is not to be
  976. confused with `Gopher', the widely used internet distributed information
  977. delivery system.
  978.  
  979. ----------------------------------------------------------------------------
  980.  
  981. 5.7. Haskell
  982.  
  983. In the mid-1980s, there was no "standard" non-strict, purely-functional
  984. programming language. A language-design committee was set up in 1987, and
  985. the Haskell language is the result. The Haskell committee released its
  986. report on 1 April 1990. A revised "Version 1.2" appeared in SIGPLAN Notices
  987. 27(5) (May 1992), along with a tutorial on Haskell.
  988.  
  989. Further information about Haskell is available on the web from:
  990.  
  991.      http://www-i2.informatik.rwth-aachen.de/Forschung/FP/Haskell/.
  992.  
  993. At the time of writing, there are three different Haskell systems available,
  994. developed by groups at Chalmers, Glasgow and Yale. These systems are
  995. available by ftp from the following sites:
  996.  
  997.       Host:      ftp.cs.chalmers.se;
  998.       Directory: /pub/haskell.
  999.  
  1000.       Host:      ftp.dcs.glasgow.ac.uk;
  1001.       Directory: /pub/haskell.
  1002.  
  1003.       Host:      haskell.cs.yale.edu;
  1004.       Directory: /pub/haskell.
  1005.  
  1006.       Host:      ftp.cs.nott.ac.uk;
  1007.       Directory: /haskell.
  1008.  
  1009.       Host:      src.doc.ic.ac.uk;
  1010.       Directory: /pub/computing/programming/languages/haskell.
  1011.  
  1012. The Haskell report, tutorials, and some programs are also available at these
  1013. sites. Specialized material, or recent releases of specific systems may only
  1014. be available from certain sites.
  1015.  
  1016. You can join the Haskell mailing list by emailing majordomo@dcs.gla.ac.uk,
  1017. with a message body of the form: subscribe haskell Forename Surname
  1018. <email@address>.
  1019.  
  1020. ----------------------------------------------------------------------------
  1021.  
  1022. 5.8. Hope
  1023.  
  1024. Hope is a small polymorphically-typed functional language, and was the first
  1025. language to use call-by-pattern. Hope was originally strict, but there are
  1026. versions with lazy lists, or with lazy constructors but strict functions.
  1027. Further information is available on the web from:
  1028.  
  1029.      http://www.unl.ac.uk/~rpaterson/Hope/.
  1030.  
  1031. ----------------------------------------------------------------------------
  1032.  
  1033. 5.9. Hugs
  1034.  
  1035. Hugs, the Haskell User's Gofer System, is an interpreted implementation of
  1036. Haskell with an interactive development environment much like that of Gofer.
  1037. Almost all of the features of Haskell 1.3 are implemented, with the
  1038. exception of the module system (like Gofer, module headers and import
  1039. declarations are parsed, but are otherwise ignored). For example, Hugs
  1040. supports Haskell style type classes, a full prelude, derived instances,
  1041. defaults, overloaded numeric literals and pattern matching, bignum
  1042. arithmetic, and monadic I/O.
  1043.  
  1044. Further information about Hugs is available on the web from:
  1045.  
  1046.      http://www.cs.nott.ac.uk/Department/Staff/mpj/hugs.html
  1047.  
  1048. or by ftp from:
  1049.  
  1050.       Host:      ftp.cs.nott.ac.uk;
  1051.       Directory: /haskell/hugs.
  1052.  
  1053. ----------------------------------------------------------------------------
  1054.  
  1055. 5.10. Id
  1056.  
  1057. Id is a dataflow programming language, whose core is a non-strict functional
  1058. language with implicit parallelism. It has the usual features of many modern
  1059. functional programming languages, including a Hindley/Milner type inference
  1060. system, algebraic types and definitions with clauses and pattern matching,
  1061. and list comprehensions.
  1062.  
  1063. ----------------------------------------------------------------------------
  1064.  
  1065. 5.11. J
  1066.  
  1067. J was designed and developed by Ken Iverson and Roger Hui. It is similar to
  1068. the language APL, departing from APL in using using the ASCII alphabet
  1069. exclusively, but employing a spelling scheme that retains the advantages of
  1070. the special alphabet required by APL. It has added features and control
  1071. structures that extend its power beyond standard APL. Although it can be
  1072. used as a conventional procedural programming language, it can also be used
  1073. as a pure functional programming language. Further information about J is
  1074. available on the web from:
  1075.  
  1076.      http://www.jsoftware.com.
  1077.  
  1078. ----------------------------------------------------------------------------
  1079.  
  1080. 5.12. Miranda(TM)
  1081.  
  1082. Miranda was designed in 1985-6 by David Turner with the aim of providing a
  1083. standard non-strict purely functional language, and is described in the
  1084. following articles:
  1085.  
  1086.    * "Miranda: a non-strict functional language with polymorphic types",
  1087.      D.A. Turner, Proceedings FPLCA, Nancy, France, September 1985 (Springer
  1088.      LNCS vol 201, pp 1-16).
  1089.  
  1090.    * "An overview of Miranda", D.A. Turner, SIGPLAN Notices, vol 21, no 12,
  1091.      pp 158-166, December 1986.
  1092.  
  1093. Miranda was the first widely disseminated language with non-strict semantics
  1094. and polymorphic strong typing, and is running at over 600 sites, including
  1095. 250 universities. It is widely used for teaching, often in conjunction with
  1096. "Introduction to Functional Programming", by Bird and Wadler, which uses a
  1097. notation closely based on Miranda. It has also had a strong influence on the
  1098. subsequent development of the field, and provided one of the main inputs for
  1099. the design of Haskell.
  1100.  
  1101. The Miranda system is a commercial product of Research Software Limited.
  1102. Miranda release two (the current version at the time of writing) supports
  1103. unbounded precision integers and has a module system with provision for
  1104. parameterized modules and a built in "make" facility. The compiler works in
  1105. conjunction with a screen editor and programs are automatically recompiled
  1106. after edits. There is also an online reference manual.
  1107.  
  1108. Further information about Miranda is available by email from:
  1109.  
  1110.      mira-request@ukc.ac.uk
  1111.  
  1112. or by post from:
  1113.  
  1114.      Research Software Ltd, 23 St Augustines Road, Canterbury CT1 1XP,
  1115.      ENGLAND. Phone: (+44) 227 471844, fax: (+44) 227 454458.
  1116.  
  1117. Miranda was awarded a medal for technical achievement by the British
  1118. Computer Society (BCS Awards, 1990). Note that the word "Miranda" is a
  1119. trademark (TM) of Research Software Limited. There are no public domain
  1120. versions of Miranda.
  1121.  
  1122. ----------------------------------------------------------------------------
  1123.  
  1124. 5.13. ML
  1125.  
  1126. ML stands for meta-language, and is a family of advanced programming
  1127. languages with (usually) functional control structures, strict semantics, a
  1128. strict polymorphic type system, and parameterized modules. It includes
  1129. Standard ML, Lazy ML, CAML, CAML Light, and various research languages.
  1130. Implementations are available on many platforms, including PCs, mainframes,
  1131. most models of workstation, multi-processors and supercomputers. ML has many
  1132. thousands of users, and is taught to undergraduates at many universities.
  1133.  
  1134. There is a moderated usenet newsgroup, comp.lang.ml, for discussion of
  1135. topics related to ML. A list of frequently asked questions for this
  1136. newsgroup (which includes pointers to many of the different implementations
  1137. and variants of ML) is available by ftp from:
  1138.  
  1139.       Host:      pop.cs.cmu.edu;
  1140.       Directory: /usr/rowan/sml-archive/.
  1141.  
  1142. The Standard ML language is formally defined by:
  1143.  
  1144.    * "The Definition of Standard ML", Robin Milner, Mads Tofte and Robert
  1145.      Harper, MIT, 1990. ISBN 0-262-63132-6.
  1146.  
  1147.    * "Commentary on Standard ML", Robin Milner and Mads Tofte, MIT, 1991.
  1148.      ISBN 0-262-63137-7.
  1149.  
  1150. There is now a revised version of Standard ML, sometimes referred to as
  1151. "Standard ML '97" to distinguish it from the original 1990 version. The new
  1152. version combines modest changes in the language with a major revision and
  1153. expansion of the SML Basis Library. Further details about Standard ML '97
  1154. are available on the web from:
  1155.  
  1156.      http://cm.bell-labs.com/cm/cs/what/smlnj/sml97.html.
  1157.  
  1158. ----------------------------------------------------------------------------
  1159.  
  1160. 5.14. NESL
  1161.  
  1162. NESL is a fine-grained, functional, nested data-parallel language, loosly
  1163. based on ML. It includes a built-in parallel data-type, sequences, and
  1164. parallel operations on sequences (the element type of a sequence can be any
  1165. type, not just scalars). It is based on eager evaluation, and supports
  1166. polymorphism, type inference and a limited use of higher-order functions.
  1167. Currently, it does not have support for modules and its datatype definition
  1168. is limited. Except for I/O and some system utilities it is purely functional
  1169. (it does not support reference cells or call/cc).
  1170.  
  1171. The NESL compiler is based on delayed compilation and compiles separate code
  1172. for each type a function is used with (compiled code is monomorphic). The
  1173. implementation therefore requires no type bits, and can do some important
  1174. data-layout optimizations (for example, double-precision floats do not need
  1175. to be boxed, and nested sequences can be laid out efficiently across
  1176. multiple processors.) For several small benchmark applications on irregular
  1177. and/or dynamic data (for example, graphs and sparse matrices) it generates
  1178. code comparable in efficiency to machine-specific low-level code (for
  1179. example, Fortran or C.)
  1180.  
  1181. The current implementation of NESL runs on workstations, the Connection
  1182. Machines CM2 and CM5, the Cray Y-MP and the MasPar MP2.
  1183.  
  1184. Further information about NESL is available on the web from:
  1185.  
  1186.      http://www.cs.cmu.edu/afs/cs.cmu.edu/project/scandal/public/www/nesl.html
  1187.  
  1188. or by ftp from:
  1189.  
  1190.       Host:      nesl.scandal.cs.cmu.edu;
  1191.       Directory: nesl.
  1192.  
  1193. You can join to the NESL mailing list by emailing nesl-request@cs.cmu.edu.
  1194.  
  1195. ----------------------------------------------------------------------------
  1196.  
  1197. 5.15. OPAL
  1198.  
  1199. The language OPAL has been designed as a testbed for the development of
  1200. functional programs. Opal molds concepts from Algebraic Specification and
  1201. Functional Programming, which shall favor the formal development of large
  1202. production-quality software that is written in a purely functional style.
  1203. The core of OPAL is a strongly typed, higher-order, strict applicative
  1204. language that belongs to the tradition of Hope and ML. The algebraic flavour
  1205. of OPAL shows up in the syntactical appearance and in the preference of
  1206. parameterization to polymorphism.
  1207.  
  1208. OPAL is used for research on the highly optimizing compilation of
  1209. applicative languages. This has resulted in a compiler which produces very
  1210. efficient code. The OPAL compiler itself is entirely written in OPAL.
  1211. Installation is straightforward and has been successfully performed for
  1212. SPARCs, DECstations, NeXTs, and PCs running LINUX.
  1213.  
  1214. Further information about OPAL is available by ftp from:
  1215.  
  1216.       Host:      ftp.cs.tu-berlin.de;
  1217.       Directory: /pub/local/uebb/.
  1218.  
  1219. ----------------------------------------------------------------------------
  1220.  
  1221. 5.16. Oz
  1222.  
  1223. Oz is a concurrent constraint programming language designed for applications
  1224. that require complex symbolic computations, organization into multiple
  1225. agents, and soft real-time control. It is based on a new computation model
  1226. providing a uniform foundation for higher-order functional programming,
  1227. constraint logic programming, and concurrent objects with multiple
  1228. inheritance. From functional languages Oz inherits full compositionality,
  1229. and from logic languages Oz inherits logic variables and constraints
  1230. (including feature and finite domain constraints.) Search in Oz is
  1231. encapsulated (no backtracking) and includes one, best and all solution
  1232. strategies.
  1233.  
  1234. DFKI Oz is an interactive implementation of Oz featuring am Emacs
  1235. programming interface, a concurrent browser, an object-oriented interface to
  1236. Tcl/Tk, powerful interoperability features (sockets, C, C++), an incremental
  1237. compiler, a garbage collector, and support for stand-alone applications.
  1238. Performance is competitive with commercial Prolog and Lisp systems. DFKI Oz
  1239. is available for many platforms running Unix/X, including Sparcs and 486
  1240. PCs, and has been used for applications including simulations, multi-agent
  1241. systems, natural language processing, virtual reality, graphical user
  1242. interfaces, scheduling, placement problems, and configuration.
  1243.  
  1244. Further information about Oz is available on the web from:
  1245.  
  1246.      http://www.ps.uni-sb.de/oz/
  1247.  
  1248. or by ftp from:
  1249.  
  1250.       Host:      ftp.ps.uni-sb.de;
  1251.       Directory: /pub/oz.
  1252.  
  1253. Specific questions on Oz may be emailed oz@ps.uni-sb.de. You can join the Oz
  1254. users mailing list by emailing oz-users-request@ps.uni-sb.de.
  1255.  
  1256. ----------------------------------------------------------------------------
  1257.  
  1258. 5.17. Pizza
  1259.  
  1260. Pizza is a strict superset of Java that incorporates three ideas from
  1261. functional programming:
  1262.  
  1263.    * Parametric polymorphism;
  1264.    * Higher-order functions;
  1265.    * Algebraic data types.
  1266.  
  1267. Pizza is defined by translation into Java and compiles into the Java Virtual
  1268. Machine, requirements which strongly constrain the design space. Thus Pizza
  1269. programs interface easily with Java libraries, and programs first developed
  1270. in Pizza may be automatically converted to Java for ease of maintenance. The
  1271. Pizza compiler is itself written in Pizza, and may be used as a replacement
  1272. for Sun's Java compiler (except that the Pizza compiler runs faster).
  1273.  
  1274. Pizza was designed by Martin Odersky and Philip Wadler, and implemented by
  1275. Odersky. The design is described in the following paper:
  1276.  
  1277.    * "Pizza into Java: translating theory into practice", Martin Odersky and
  1278.      Philip Wadler, 24th ACM Symposium on Principles of Programming
  1279.      Languages, Paris, January 1997.
  1280.  
  1281. The paper, downloads, and other information on Pizza is available on the web
  1282. from any of the following locations (which mirror each other):
  1283.  
  1284.      http://www.cis.unisa.edu.au/~pizza;
  1285.  
  1286.      http://cm.bell-labs.com/cm/cs/who/wadler/pizza/welcome.html;
  1287.  
  1288.      http://wwwipd.ira.uka.de/~pizza;
  1289.  
  1290.      http://www.math.luc.edu/pizza/;
  1291.  
  1292.      ftp://ftp.eecs.tulane.edu/pub/maraist/pizza/welcome.html.
  1293.  
  1294. Pizza has received a `cool' award from Gamelan ( http://www-c.gamelan.com/.)
  1295.  
  1296. ----------------------------------------------------------------------------
  1297.  
  1298. 5.18. Scheme
  1299.  
  1300. Scheme is a dialect of Lisp that stresses conceptual elegance and
  1301. simplicity. It is specified in R4RS and IEEE standard P1178. Scheme is much
  1302. smaller than Common Lisp; the specification is about 50 pages. Scheme is
  1303. often used in computer science curricula and programming language research,
  1304. due to its ability to simply represent many programming abstractions.
  1305.  
  1306. Further information about Scheme is available on the web from:
  1307.  
  1308.      http://www-swiss.ai.mit.edu/scheme-home.html.
  1309.  
  1310. There is an unmoderated usenet newsgroup, comp.lang.scheme, for the
  1311. discussion of topics related to Scheme. A list of frequently asked questions
  1312. (which includes details of the many books and papers concerned with Scheme)
  1313. for this newsgroup is available by ftp from:
  1314.  
  1315.       Host:      ftp.think.com;
  1316.       Directory: /public/think/lisp/.
  1317.  
  1318. ----------------------------------------------------------------------------
  1319.  
  1320. 5.19. Sisal
  1321.  
  1322. Sisal (Streams and Iteration in a Single Assignment Language) is a
  1323. functional language designed with several goals in mind: to support clear,
  1324. efficient expression of scientific programs; to free application programmers
  1325. from details irrelevant to their endeavors; and, to allow automatic
  1326. detection and exploitation of the parallelism expressed in source programs.
  1327.  
  1328. Sisal syntax is modern and easy to read; Sisal code looks similar to Pascal,
  1329. Modula, or Ada, with modern constructs and long identifiers. The major
  1330. difference between Sisal and more conventional languages is that it does not
  1331. express explicit program control flow.
  1332.  
  1333. Sisal semantics are mathematically sound. Programs consist of function
  1334. definitions and invocations. Functions have no side effects, taking as
  1335. inputs only explicitly passed arguments, and producing only explicitly
  1336. returned results. There is no concept of state in Sisal. Identifiers are
  1337. used, rather than variables, to denote values, rather than memory locations.
  1338.  
  1339. The Sisal language currently exists for several shared memory and vector
  1340. systems that run Berkeley Unix(tm), including the Sequent Balance and
  1341. Symmetry, the Alliant, the Cray X/MP and Y/MP, Cray 2, and a few other less
  1342. well-known ones. Sisal is available on sequential machines such as Sparc,
  1343. RS/6000, and HP. Sisal also runs under MS-DOS and Macintosh Unix (A/UX).
  1344. It's been shown to be fairly easy to port the entire language system to new
  1345. machines.
  1346.  
  1347. Further information about Sisal is available on the web from:
  1348.  
  1349.      http://www.llnl.gov/sisal/SisalHomePage.html.
  1350.  
  1351. ----------------------------------------------------------------------------
  1352.  
  1353. The original version of this Frequently Asked Questions list (FAQ) was
  1354. compiled and edited by Mark P. Jones. All questions, comments, corrections,
  1355. and suggestions regarding this document should be addressed to the current
  1356. editor, Graham Hutton (email: gmh@cs.nott.ac.uk.)
  1357.