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写的函数轻易扩充。

参见

  • 串接编程语言

引用
外部链接

*
*
*
*

评论 (0)

  • 还没有评论,来抢沙发吧。