跳转到导航跳转到搜索计算机科学中的Joy编程语言是一种纯函数式编程语言,由澳大利亚墨尔本拉特洛比大学的Manfred von Thun开发。Joy基于函数的组合,而不是λ演算。事实证明,它与Forth有许多相似之处,这不是因为设计,而是因为一种并行的进化和融合。它的灵感也来自于John Backus的FP的函数级编程风格。
Joy的不同寻常之处在于它缺少lambda运算符,因此缺少形式化参数(除了函数级编程语言和一些深奥的编程语言,比如unlambda)。为了用一个常见的示例来说明这一点,下面是如何在命令式编程语言(C)中定义Square函数:
变量x是一个形式参数,当调用函数时,它将被要平方的实际值替换。在函数式语言(方案)中,可以定义相同的函数:
这在很多方面都不同,但它仍然以相同的方式使用形参x。在Joy中定义了平方函数:
在Joy中,一切都是一个函数,它接受堆栈作为参数,并返回一个堆栈作为结果。例如,数字';5';不代表整数常量,而是一个将数字5压入堆栈的短程序。
DUP操作符只是通过推送堆栈的副本来复制堆栈的顶部元素。
因此,Square函数复制top元素,然后将堆栈的两个top元素相乘,将原始top元素的平方留在栈顶,不需要形式参数。这使得Joy简明扼要,如快速排序的定义所示:
binrec&34;是Joy的众多递归组合器之一,实现二进制递归。它预计堆栈顶部会有四个引用的计划,它们代表:
终止条件(如果列表很小(1或0个元素),则它已经排序),
默认情况下要做什么(通过将每个元素与透视表进行比较,将列表拆分为两半),最后。
在“欢乐”中,意义功能是从句法么半群到语义么半群的同态。也就是说,符号连接的句法关系直接映射到功能组合的语义关系上。它是同态而不是同构,因为它是同态的,但不是一对一的;也就是说,没有符号有一个以上的含义,但一些符号序列具有相同的含义(例如,";dup+";和";2*";)。
Joy是一种串联编程语言:";两个程序的串联表示由两个程序表示的函数的组合。[2]。
它的库例程反映了ISO C的库例程,尽管当前的实现不容易用C编写的函数进行扩展。
Manfred von Thun(2003年12月12日)。与曼弗雷德·冯·桑的对话。在20世纪80年代初,我偶然看到著名的巴克斯论文“编程能从冯·诺依曼的风格中解放出来吗?”,我立刻被他的FP中更高层次的编程吸引住了。
冯通,曼弗雷德;托马斯,鲁本(2001年10月9日)。乔伊:福斯的功能表亲(PDF)。第17届欧洲第四届会议论文集。
阿普特,这是斯蒂文。";Joy和K";中的函数式编程。矢量。存档日期为2008-08-28。