Q - Equational Programming Language





If you have anything to add to this list please let me know.

Links to related work:

  • fun->pdf: Jan Skibinski's functional interface to create PDF documents. Targets Haskell, ML and an earlier (much much earlier!) Q version. (This is a link to the WaybackMachine. Unfortunately, Jan's original website www.numeric-quest.com went offline at some time in 2001.)
  • q-lang egg: John Cowan's egg (Chicken Scheme library) makes available the facilities of the Q language to Chicken programmers. Chicken is a compiler for the Scheme programming language.

Additional information on term rewriting:

  • Term rewriting comes from a mathematical field called universal algebra, and is one of cornerstones of modern computer algebra systems. In the 1980s Michael O'Donnell pioneered the use of term rewriting as a programming language, and he also coined the term "equational programming".
  • More information about term rewriting can be found at the Rewriting Home Page of the IFIP Working Group 1.6.

Links to other software which also uses term rewriting as an underlying computational model:

  • Aardappel: Wouter van Oortmerssen's visual programming language based on term rewriting.
  • ELAN: An environment for specifying and prototyping deduction systems in a language based on rewrite rules controlled by strategies.
  • EPIC: A reduction engine intended as a target for term rewriting compilers.
  • Escher: An experimental functional+logic programming language.
  • Mathematica: Arguably one of the most popular computer algebra systems out there. Other well-known examples are Maple and REDUCE.
  • OBJ: The mother of all algebraic programming and specification languages (actually, an entire family of languages supporting equational programming and theorem proving).
  • OPAL: A more modern algebraic programming language which also includes support for typical FP features such as currying and higher-order functions.
  • Otter: A theorem prover which has an embedded equational programming system.
  • Pure: Pure is my stab at the "next Q", a much improved, complete rewrite of Q which compiles to fast native code and is slated to eventually become Q's successor.
  • Req: Darius Bacon's calculator programmable with rewrite rules.
  • Stratego: A language and toolset for program transformation, useful for creating compilers and program generators.

Links to other modern functional programming languages:

  • Clean: A Haskell-like lazy functional language, with some additional features, but not as widely used as Haskell.
  • Erlang: This language was developed by Ericsson for use in telecommunication hardware. Like Q, it uses dynamic typing which has become somewhat unusual in the FP language zoo.
  • Haskell: The premier lazy functional language. 'Nuff said.
  • Miranda: The lazy functional language developed by David Turner and predecessor of Haskell. Might have become the standard lazy functional language, but Turner decided to market it as commercial software instead. (A binary package with the interpreter can be downloaded freely from the above website for personal use, but no open source implementation is available.) The language is still of historical interest, though, and apparently was the basis of the notation used in the original edition of Bird and Wadler's book on functional programming which also inspired Q's syntax.
  • OCaml: A popular implementation of the ML programming language. ML was probably the first "modern style" (i.e., non Lisp-alike, statically typed) FP language which saw fairly widespread use.
  • The above is only the tip of the iceberg; see the Wikipedia entry on Functional Programming for more information and links.
© 2007 by Albert Gräf