Joy语言

Joy编程语言是澳大利亚乐卓博大学Manfred von Thun创立的纯函数式编程语言。Joy基于了函数复合而非lambda表达式。它表现出同30年前出现的Forth语言的很多类似性，这不归结为设计原因而是某种平行的演化和趋同。它还受到John Backus的FP语言的函数级编程风格的影响。

 工作机理 
Joy是不寻常的（除了函数级编程语言和某些难懂语言如之外），在于它缺乏lambda算子，因而缺乏形式参数。要通过常见例子来说明，平方函数在指令式编程语言（C语言）中定义如下：

int square(int x)
{
    return x * x;
}

变量x是形式参数，它在函数别调用时被替换为要计算平方的实际值。在函数式语言（Scheme语言）中这个函数可以定义为：

(define square
  (lambda (x) 
    (* x x)))

这在很多方面有所不同，但仍然以相同方式使用了形式参数x。在Joy中平方函数定义为：
 DEFINE square == dup * .
在Joy中，所有东西都是从堆栈中取得实际参数并向堆栈返回结果的函数。例如，数值5不表示整数常量，转而是将5压入栈顶的一个短程序。
 dup算子通过压入栈顶元素的副本而简单的复制它。
 *算子弹出栈顶的两个元素并将它们的乘积压入栈顶。

所以平方函数复制栈顶元素，接着将栈顶二个元素相乘，把最初栈顶元素的平方留在栈顶，这个过程不需要形式参数。这使得Joy很简明，如下面快速排序定义所展示的：
 DEFINE qsort ==
   [small]
   []
   [uncons [>] split]
   [enconcat]
   binrec.
binrec是Joy的多个递归组合子之一，实现了二叉递归。它预期在栈顶有四个引用的程序，分别表示：

 终止条件（如果这个列表是“小”的（1或0个元素）则它已经排好序了），
 如果终止条件满足做什么（这里什么都不做），
 缺省做什么（通过比较每个元素于基准元素而将列表分解成两个半份列表），还有最后的
 结束时做什么（在两个排好序的半份列表间插入基准元素）。

 数学纯粹性 
在Joy中，含义函数是从语法幺半群到语义幺半群的同态。就是说，符号的串接的语法关系直接映射成函数的复合的语义关系上。这是同态而非同构，因为这是满射而非双射；就是说，没有符号有多于一个含义，但是某些符号序列有相同的含义（比如dup +和2 *）。

Joy是串接编程语言：“两个程序的串接指示这两个程序指示的函数的复合”。

它的库例程镜像了ISO C的库例程，尽管当前实现不能用C写的函数轻易扩充。

 参见 
 串接编程语言

 引用 

外部链接
 Official Joy Programming Language Website (La Trobe University) 
 Joy homepage mirror 




 mjoy, an interpreter in Delphi for machine drawing  (Subset of Joy)
 Joy of Postfix Calculator App  (Subset of Joy)

Category:函数式编程语言
Category:面向堆栈编程语言
Category:学术的编程语言
Category:2001年建立的程式語言