Joy语言 您所在的位置:网站首页 pure函数 Joy语言

Joy语言

#Joy语言| 来源: 网络整理| 查看: 265

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

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

目录 1 工作机理 2 数学纯粹性 3 参见 4 引用 5 外部链接 工作机理[编辑]

Joy是不寻常的(除了函数级编程语言和某些难懂语言如unlambda(英语: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)

查论编程序设计语言按范型过程式 FORTRAN COBOL ALGOL 60 BASIC QB64(英语:QB64) PL/I MUMPS(英语:MUMPS) ALGOL 68 Forth Pascal Turbo Pascal C Modula-2 Ada 83 occam Oberon Go Zig Carbon 面向对象 Simula 67 Smalltalk C++ Objective-C Eiffel Object Pascal Delphi Self Visual Basic Gambas Ada 95 Java C# Vala Fantom(英语:Fantom (programming language)) Crystal(英语:Crystal (programming language)) 多范型 Modula-3 Dylan Python Lua JavaScript Ruby D Factor Scala F# F* Haxe Dafny(英语:Dafny) Nim Rust Dart Julia Swift Bosque(英语:Bosque (programming language)) 函数式 LISP Scheme Common Lisp Clojure Logo APL/J ML Standard ML OCaml Erlang Elixir Haskell Curry SAC Agda Idris Pure(英语:Pure (programming language)) jq(英语:jq (programming language)) Cuneiform 逻辑式 Prolog Datalog Mercury AnsProlog 脚本语言动态语言 SNOBOL Icon REXX Perl Raku Tcl/Tk CLOS newLISP Python Lua Ruby PHP Hack REBOL Red(英语:Red (programming language)) Io Julia Shell语言 Unix shell sh csh/tcsh ksh bash ash zsh rc(英语:rc) fish sed AWK PowerShell ECMA-262 ECMAScript JavaScript TypeScript Node.js/Deno CoffeeScript/LiveScript(英语:LiveScript (programming language)) Elm PureScript Reason 特定平台.NET C# C++/CLI F# PowerShell VB.NET Small Basic JVM Java AspectJ(英语:AspectJ) Scala Clojure Groovy Kotlin 特定领域科学计算 Speakeasy(英语:Speakeasy (computational environment)) IDL GDL Maxima Maple MATLAB Octave Scilab Wolfram R Yorick(英语:Yorick (programming language)) SageMath Julia GPU计算 GLSL HLSL OpenCL CUDA Futhark 数据查询 SQL PL/SQL T-SQL SQL/PSM(英语:SQL/PSM) xBase(英语:xBase) XPath XQuery(英语:XQuery) GraphQL 可视化 Simulink LabVIEW Orange(英语:Orange (software)) KNIME(英语:KNIME) Scratch Snap! Power Fx 传媒设计 SuperCollider Pure Data Processing ChucK 其它 汇编语言 make PostScript XSLT WebAssembly 目录 列表 历史 比较(英语:Comparison of programming languages) 时间线(英语:Timeline of programming languages)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有