The language Joy is a purely functional programming language.
Whereas
all other functional programming languages are based on the
application
of functions to arguments, Joy is based on the composition of
functions.
All such functions take a stack as argument and produce a stack as
value. Consequently much of Joy looks like ordinary postfix
notation.
However, in Joy a function can consume any number of parameters from
the
stack and leave any number of results on the stack. The concatenation
of
appropriate programs denotes the composition of the functions which
the
programs denote. One of the datatypes of Joy is that of quoted
programs,
of which lists are a special case. Some functions expect quoted
programs
on top of the stack and execute them in many different ways,
effectively
by dequoting. So, where other functional languages use abstraction
and
application, Joy uses quotation and combinators – functions which
perform dequotation. As a result, there are no named formal
parameters,
no substitution of actual for formal parameters, and no environment
of
name-value pairs. Combinators in Joy behave much like functionals
or
higher order functions in other languages, they minimise the need
for
recursive and non-recursive definitions. Because there is no need for
an
environment, Joy has an exceptionally simple algebra, and its
programs
are easily manipulated by hand and by other programs. Many
programs
first construct another program which is then executed.