Joy语言
Joy编程语言是澳大利亚乐卓博大学Manfred von Thun创立的纯函数式编程语言。Joy基于了函数复合而非lambda表达式。它表现出同30年前出现的Forth语言的很多类似性,这不归结为设计原因而是某种平行的演化和趋同。它还受到John Backus的FP语言的函数级编程风格的影响[1]。
编程范型 | 多范型: 函数式, 串接式, 面向堆栈 |
---|---|
设计者 | Manfred von Thun |
实现者 | Manfred von Thun John Cowan |
发行时间 | 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写的函数轻易扩充。
参见
引用
- ^ Manfred von Thun. A Conversation with 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.
- ^ Mathematical Foundations of Joy. [2020-04-20]. (原始内容存档于2011-10-07).
外部链接
- Official Joy Programming Language Website (La Trobe University) (页面存档备份,存于互联网档案馆)
- Joy homepage mirror (页面存档备份,存于互联网档案馆)
- Freneger, Paul. The JOY of forth. ACM SIGPLAN Notices. August 2003, 38 (8).
- von Thun, Manfred; Thomas, Reuben. Joy: Forth’s Functional Cousin (PDF). Proceedings of the 17th EuroForth Conference. October 9, 2001 [2020-04-20]. (原始内容存档 (PDF)于2019-11-04).
- Christopher Diggins. What is a Concatenative Language. Dr. Dobbs. December 31, 2008 [2020-04-20]. (原始内容存档于2012-05-14).
|volume=
被忽略 (帮助) - Apter, Stevan. Functional Programming in Joy and K. Vector. [2011-02-28]. (原始内容存档于2008-08-28).
- mjoy, an interpreter in Delphi for machine drawing (页面存档备份,存于互联网档案馆) (Subset of Joy)
- Joy of Postfix Calculator App (Subset of Joy)