Joy语言

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

Joy
多范型: 函数式, 串接式, 面向堆栈
設計者Manfred von Thun
實作者Manfred von Thun
John Cowan
2001年2001
型態系統强类型, 动态类型
主要實作產品
Joy0, Joy1, "Current Joy", "John Cowan's Joy", "JoyJ (Joy in jvmm)"
啟發語言
Scheme, FP, Forth
影響語言
Factor, Cat, V, Trith

工作机理

Joy是不寻常的(除了函数级编程语言和某些难懂语言unlambda之外),在于它缺乏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是串接编程语言:“两个程序的串接指示这两个程序指示的函数的复合”[2]

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

参见

引用

  1. Manfred von Thun. . December 12, 2003 [May 31, 2013]. (原始内容存档于2020-11-09). In the early 1980s I came across the famous Backus paper "Can programming be liberated from the von Neumann style," and I was immediately intrigued by the higher level of programming in his FP.
  2. . [2020-04-20]. (原始内容存档于2011-10-07).

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.