Joy (programming language): Difference between revisions

Content deleted Content added
Dv~enwiki (talk | contribs)
m added categories
Fredrik (talk | contribs)
mNo edit summary
Line 1:
The '''Joy programming language''' is a simple [[functional programming language]] that was produced by Manfred von Thun of [[Latrobe University]] in [[Melbourne]], [[Australia]]. Joy is based on composition of functions rather than [[lambda calculus]]. It has turned out to have many similarities to [[Forth programming language|Forth]], due less to design than to a sort of parallel evolution and convergence.
 
Joy is almost unique (except for [[Function-level programming]] languages and some esoteric ones, such as [[unlambda]]) in its lack of a [[lambda]] operator, and therefore lack of [[Parameter (computer science)|formal parameters]]. To illustrate this with a common example, here's is how the square function might be defined in an [[imperative programming language]] ([[C programming language|C]]):
 
int square(int x) {
Line 13:
(* x x)))
 
This is different in many ways, but it still uses the formal parameter x in the same way. Now here's is how the square function would be defined in joy:
 
DEFINE square == dup * .
 
That probably requires some explanation. In joy, everything is a function that takes a [[Stackstack (computing)|stack]] as an argument and returns a stack as a result. For instance, the number 5 is not, as it might appear to be, an integer constant, but instead a short program that pushes the number 5 onto the stack. The + operator pops two numbers off the stack and pushes their sum. The dup operator simply duplicates the top element of the stack by pushing a copy of it. So this definition of the square function says to make a copy of the top element and then multiply the two top elements, leaving the square of the original top element on top of the stack. There is no need for a formal parameter at all. This design makes joy one of the most powerful and concise languages, as illustrated by this definition of [[quicksort]]:
 
<pre>