查看“︁APL語言”︁的源代码
←
APL語言
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{infobox programming language | name = APL | logo = File:APL (programming language) logo.svg | logo_size = 140px | paradigm = [[阵列编程|阵列]]、[[函数式编程|函数式]]、[[结构化编程|结构化]]、[[模块化编程|模块化]] | year = {{Start date and age|1966|11|27}}<ref name="Birthdate">{{cite web|url=http://www.jsoftware.com/papers/APLQA.htm#APL_birthday|title=APL Quotations and Anecdotes|website=jsoftware.com|publisher=[[J (programming language)|jsoftware]]|access-date=April 14, 2018|archive-date=2020-05-09|archive-url=https://web.archive.org/web/20200509235705/https://www.jsoftware.com/papers/APLQA.htm#APL_birthday|dead-url=no}}</ref> | designer = [[Kenneth E. Iverson]] | developer = {{en-link|Lawrence M. Breed|Lawrence M. Breed|Larry Breed}}、{{en-link|Richard H. Lathwell|Richard H. Lathwell|Dick Lathwell}}、{{en-link|罗杰·摩尔 (计算机科学家)|Roger Moore (computer scientist)|Roger Moore}}等人 | latest release version = ISO/IEC 13751:2001 | latest release date = {{Start date and age|2001|02|01}} | typing = [[类型系统|动态类型]] | platform = [[跨平台]] | license = [[专有软件|专有]]、[[开源软件|开源]] | implementations = {{startflatlist}} *APL\360 *APL\1130 *APL*Plus *Sharp APL *APL2 *Dyalog APL *NARS2000 *{{en-link|APLX}} *GNU APL {{endflatlist}} | influenced by = [[数学符号|数学表示法]] | influenced = {{startflatlist}} * [[A+|A和A+]] * [[FP (编程语言)|FP]] * <tt>[[J语言|J]]</tt> * [[K (编程语言)|K]] * {{en-link|LYaPAS}} * [[MATLAB]] * {{en-link|Nial}} * {{en-link|多态编程语言|Polymorphic Programming Language|PPL}} * [[S语言|S]] * {{en-link|Speakeasy (计算环境)|Speakeasy (computational environment)|Speakeasy}} * [[Wolfram语言]] {{endflatlist}} }} {{APLcode}} '''APL''' 是 '''A Programming Language''' 或 '''Array Processing Language''' 的缩写。[[肯尼斯·艾佛森]]在1962年设计这个语言时他正在[[哈佛大学]]工作,1979年他因对[[数学表达式]]和[[编程语言]]理论的贡献而得到[[图灵奖]]。在过去数十年的使用历史中,APL 从它的原始版本开始不断改变和发展,今天的版本与1963年发表时的版本已经非常不一样了。但它始终是一种解释执行的计算机语言。现代的 APL 版本支持其初始版本不支持的结构和模式编程。APL 至今依然使用一种非标准化的字母表,这一直是他人对 APL 的批评。 == 概述 == 在许多应用场合下(数学、科学、工程技术、电脑设计、机器人、数据显示、保险技术、传统的数据处理等等),APL是一种非常有力的、表达丰富的和简明的编程语言。它一般被用在一个与用户接口的环境中。它最初的设计目的是将数学公式写成一种电脑可以理解的方式。学它一般很容易,但要分析 APL 写成的程序往往需要一段时间。与传统的结构式编程语言不同的是,APL 的程序一般由一系列使用在序列上的单元的或双元的函数或运算符号组成。由于APL拥有许多非标准的运算符号,这些符号之间没有优先性(比如一般数学中的乘号、除号较加号、减号有优先权,APL中没有这样的优先权)。最初的APL语言没有任何控制结构如循环(do-while)或者条件选择(if-then-else),但一些序列运算符号可以用来模拟编程结构,比如[[Iota函数|iota]](用来获得一个从1至N的序列)可以用来模拟循环(for)。 APL 的工作环境被称为工作场。在这个工作场内用户可以定义程序和数据。数据也可以在工作场在程序外存在。用户可以在程序外改变数据,比如: :<math>N \leftarrow 4\ 5\ 6\ 7</math> 将一个系列的数据4、5、6、7授予N。 :<math>N+4\,\!</math> 输出8、9、10、11。 :<math>+/N\,\!</math> 输出N内所有数的和,即22。 用户可以将工作场连同其中的所有数据和程序储存起来。在任何情况下,这些程序不是编译执行,而是解释执行的。 APL 最著名的就是它使用一组非[[ASCII]]符号。这些符号比一般常见的代数和计算符号要多。有人开玩笑说,用两行这样的奇形怪状的符号就可以将所有航空控制的问题解决了。事实上,在一些APL版本中,用一行程序就可以将任何可计算的函数表达出来,再用一行你可以将这个函数的结构表达出来。由于它的精密的结构和非标准的符号,也有人将APL称为“只写语言”。除数学家外,其他人要读APL写的程序都感到非常困难。有些数学家觉得其它语言比APL难懂。由于APL使用不寻常的符号,许多编程员在写APL程序时使用专门的APL键盘。今天也有不同的只使用ASCII字母写APL的方法。 艾佛森后来还设计了一个APL的后续,称为[[J语言]],这个语言只使用ASCII符号。至今为止只有一种J语言。一些其它语言也提供类似APL的功能。[[A+]]是一种[[开源]]的编程语言,其许多指令与APL相同。 下面这个例子排列一个存在X里的词的序列,排列标准是每个词的长度: X[X+.¬' ';] 下面是一个寻找所有1和R之间的[[质数]]的例子: :<math>\left(\sim R \in R \circ . \times R\right)/R \leftarrow 1 \downarrow \iota R</math> 下面是这个程序的读法(从右向左): # <math>\iota\,\!</math>建立含有从1到R的自然数的系列(假如程序开始时R=6,那么<math>\iota R\,\!</math>是1 2 3 4 5 6) # 放弃这个系列中的第一个元素(<math>\downarrow</math>)(<math>1 \downarrow \iota R</math>是2 3 4 5 6) # 令R成为这个系列(<math>\leftarrow</math>是授值符号) # 令R与R相乘而组成一个[[矩阵]],实际上是组成一个R乘R的乘法表(<math>\circ . \times</math>) # 建立一个长度与R相同的系列,假如R中相应位置的数在乘法矩阵中出现,那么在这个位置上的数就应该是1,否则0(<math>\in</math>),这个运算的结果是0 0 1 0 1 # 逻辑地否定的系列中的数,也就是说,1成为0,0成为1(<math>\sim</math>),结果是1 1 0 1 0 # 选择R中相应的在新的系列中为1的数,这些数是质数(<math>/\,\!</math>),结果为2 3 5 以下是[[Perl]]语言的相应程序: perl -le '$_ = 1; (1 x $_) !~ /^(11+)\1+$/ && print while $_++' 以下是[[J语言]]的相应程序: ( -. r e. , r */ r ) # r =: }. 1 + i. 7 == APL 的 Hello World 程序 == <syntaxhighlight lang="apl"> 'Hello, world' </syntaxhighlight> == 字母表 == 从一开始就有人批评APL使用一套特别的、非标准的字母表。学过APL的人一般很喜欢这些特别的符号,这说明当时艾佛森选择这些符号时是有一定的用意的。[[Unicode]]包含这些字母,Unicode被引入后,要寻找特别的[[字型]]的问题开始有所减缓。虽然如此依然有人批评当初APL设计时所选择的特殊的符号。这些专门为APL设计的键盘无论如何不会非常普及。 :[[File:APL-keybd2.svg|600px]] == 实现 == [http://www.gnu.org/software/apl GNU APL]{{Wayback|url=http://www.gnu.org/software/apl |date=20131112225727 }}是一个[[自由软件|自由]]的APL实现,它可以运行在Linux,Windows还有Mac OS X系统上。 ==引用== {{reflist}} == 外部链接 == * [http://www.computerhistory.org/atchm/the-apl-programming-language-source-code/ The APL Programming Language Source Code]{{Wayback|url=http://www.computerhistory.org/atchm/the-apl-programming-language-source-code/ |date=20170906205616 }} {{APL编程语言}} {{程序设计语言|APL}} [[Category:程序设计语言]] [[Category:APL編程語言家族]]
该页面使用的模板:
Template:APLcode
(
查看源代码
)
Template:APL编程语言
(
查看源代码
)
Template:Infobox programming language
(
查看源代码
)
Template:Reflist
(
查看源代码
)
Template:Wayback
(
查看源代码
)
Template:程序设计语言
(
查看源代码
)
返回
APL語言
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息