Welcome to the Dictionary of Programming Languages, a compendium
of computer coding methods assembled to provide information and
aid your appreciation for computer science history.
Browse the dictionary by clicking on a section:
Get a full dump of the dictionary:
List of Names
- Language type:
F - Functional or lambda-based
Hope is a small, simple functional language
based function composition and
on the idea of 'call-by-pattern.'
A Hope program consists of a set of
modules, each of which can contain
sets of recursion equations.
Current implementations of Hope
use full lazy evaluation.
Unlike some of the original functional
languages, Hope is strongly typed.
There were a couple of dialects of Hope,
corresponding to different
groups' implementations. The one that seems
available today was originally called Hope .
Data types supported by Hope include
numbers, symbols, strings, lists, and tuples.
(Constituents of a list must be
all the same type, while tuples can
be heterogenous.) A Hope programmer
can define their own primitive and
aggregate types. This ability to
create true abstract data types is
a novel feature in functional languages.
Modern implementations of Hope use
A free implementation of the Hope
interpreter is available for
MS-DOS, Unix, and Macintosh.
Burstall 1978, Perry, Kewley et al 1985.
- See Also:
Hope was apparently the first
to employ argument/return pattern-matching
as a polymorphism semantic. This
kind of approach is carried on today
in some symbolic programming
systems, notably Mathematica, as well
as many newer functional languages.
The original language Hope was developed
at Edinburgh U. by Burstall in the late
1970s. A successor, called Hope , was
developed at ICL by J. Kewley, T. Thomson,
others in the mid-1980s;
the first implementation used
eager evaluation, but later
ones switch to the more advanced
lazy evaluation strategy.
- Sample code:
A module for listing the contents of a
tree by breadth-first traversal using
lazy evaluation, from Ross Paterson's
Hope web page.
use lists, functions, products;
type rose_tree alpha == alpha # list(rose_tree alpha);
dec bf_list : rose_tree alpha -> list alpha;
--- bf_list t <= [t].
iterate (concat o map snd).
front_with (/= ).
Descriptions in this dictionary are ©1997-99 Neal Ziring. Some
examples copyright of their respective authors. Some
technologies and languages are trademarked. Permission to
copy descriptions is granted as long as authorship credit is preserved.
Comments on this dictionary, corrections and suggestions, are all welcome.
Please use email, the address is email@example.com
[Ziring MicroWeb Home]
Dictionary and script maintained by Neal Ziring, last major modifications 3/18/98. Most recent
additions to dictionary and master list, 1/00.