Joy (programming language): Difference between revisions

Content deleted Content added
Fpstefan (talk | contribs)
Remove unneeded examples in other languages and unsourced content
Line 21:
== How it works ==
 
Joy is unusual among functional programming languages (except for [[function-level programming]] languages and some esoteric ones, such as [[Unlambda]]) in its lack of a [[lambda calculus|lambda]] operator, and therefore lack of [[Parameter (computer science)|formal parameters]]. To illustrate this with a common example, here is how the square function might be defined in an [[imperative programming language]] ([[C (programming language)|C]]):
 
For example, a function that squares a numeric input can be expressed as follows:
<syntaxhighlight lang="C">
int square(int x)
{
return x * x;
}
</syntaxhighlight>
 
The variable x is a parameter which is replaced by the argument to be squared when the function is called.
 
In a [[functional programming|functional]] language ([[Scheme (programming language)|Scheme]]), the same function could be defined:
 
<syntaxhighlight lang="scheme">
(define square
(lambda (x)
(* x x)))
</syntaxhighlight>
 
This is different in many ways, but it still uses the parameter x in the same way.
 
In Joy, the square function is defined:
 
DEFINE square == dup * .
Line 61 ⟶ 42:
binrec.
</nowiki></pre>
 
"binrec" is one of Joy's many [[recursion|recursive]] [[combinator]]s, implementing binary recursion. It expects four quoted programs on top of the stack which represent:
 
* the termination condition (if a list is "small" (1 or 0 elements) it is already sorted),
* what to do if the termination condition is met (in this case nothing),
* what to do by default (split the list into two halves by comparing each element with the pivot), and finally
* what to do at the end (insert the pivot between the two sorted halves).
 
== Mathematical purity ==
In Joy, the [[eval|meaning function]] is a [[homomorphism]] from the [[syntactic monoid]] onto the [[semantics|semantic]] [[monoid]]. That is, the syntactic relation of [[concatenation]] of [[symbol]]s maps directly onto the semantic relation of [[Function composition|composition]] of [[function (mathematics)|functions]]. It is a [[homomorphism]] rather than an [[isomorphism]], because it is [[onto]] but not [[bijection|one-to-one]]; that is, no symbol has more than one meaning, but some sequences of symbols have the same meaning (e.g. "dup +" and "2 *").
 
Joy is a [[concatenative programming language]]: "The concatenation of two programs denotes the composition of the functions denoted by the two programs".<ref>{{cite web|title=Mathematical Foundations of Joy |url=http://www.latrobe.edu.au/phimvt/joy/j02maf.html |url-status=dead |archive-url=https://web.archive.org/web/20111007025556/http://www.latrobe.edu.au/phimvt/joy/j02maf.html |archive-date=October 7, 2011 }}</ref>
 
Its library routines mirror those of ISO [[C (programming language)|C]], though the current implementation is not easily extensible with functions written in C.
 
== See also ==