fbpx
维基百科

APL語言

APLA Programming LanguageArray Processing Language 的缩写。肯尼斯·艾佛森在1962年设计这个语言时他正在哈佛大学工作,1979年他因对数学表达式编程语言理论的贡献而得到图灵奖。在过去数十年的使用历史中,APL 从它的原始版本开始不断改变和发展,今天的版本与1963年发表时的版本已经非常不一样了。但它始终是一种解释执行的计算机语言。现代的 APL 版本支持其初始版本不支持的结构和模式编程。APL 至今依然使用一种非标准化的字母表,这一直是他人对 APL 的批评。

APL
编程范型阵列函数式结构化模块化
設計者Kenneth E. Iverson
實作者Larry Breed英语Lawrence M. BreedDick Lathwell英语Richard H. LathwellRoger Moore英语Roger Moore (computer scientist)等人
发行时间1966年11月27日,​56年前​(1966-11-27[1]
型態系統动态类型
系统平台跨平台
許可證专有开源
主要實作產品
  • APL\360
  • APL\1130
  • APL*Plus
  • Sharp APL
  • APL2
  • Dyalog APL
  • NARS2000
  • APLX英语APLX
  • GNU APL
啟發語言
数学表示法
影響語言
  • A和A+
  • FP
  • J
  • K
  • LYaPAS英语LYaPAS
  • MATLAB
  • Nial英语Nial
  • PPL英语Polymorphic Programming Language
  • S
  • Speakeasy英语Speakeasy (computational environment)
  • Wolfram语言

概述

在许多应用场合下(数学、科学、工程技术、电脑设计、机器人、数据显示、保险技术、传统的数据处理等等),APL是一种非常有力的、表达丰富的和简明的编程语言。它一般被用在一个与用户接口的环境中。它最初的设计目的是将数学公式写成一种电脑可以理解的方式。学它一般很容易,但要分析 APL 写成的程序往往需要一段时间。与传统的结构式编程语言不同的是,APL 的程序一般由一系列使用在序列上的单元的或双元的函数或运算符号组成。由于APL拥有许多非标准的运算符号,这些符号之间没有优先性(比如一般数学中的乘号、除号较加号、减号有优先权,APL中没有这样的优先权)。最初的APL语言没有任何控制结构如循环(do-while)或者条件选择(if-then-else),但一些序列运算符号可以用来模拟编程结构,比如iota(用来获得一个从1至N的序列)可以用来模拟循环(for)。

APL 的工作环境被称为工作场。在这个工作场内用户可以定义程序和数据。数据也可以在工作场在程序外存在。用户可以在程序外改变数据,比如:

 

将一个系列的数据4、5、6、7授予N。

 

输出8、9、10、11。

 

输出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之间的质数的例子:

 

下面是这个程序的读法(从右向左):

  1.  建立含有从1到R的自然数的系列(假如程序开始时R=6,那么 是1 2 3 4 5 6)
  2. 放弃这个系列中的第一个元素( )( 是2 3 4 5 6)
  3. 令R成为这个系列( 是授值符号)
  4. 令R与R相乘而组成一个矩阵,实际上是组成一个R乘R的乘法表( 
  5. 建立一个长度与R相同的系列,假如R中相应位置的数在乘法矩阵中出现,那么在这个位置上的数就应该是1,否则0( ),这个运算的结果是0 0 1 0 1
  6. 逻辑地否定的系列中的数,也就是说,1成为0,0成为1( ),结果是1 1 0 1 0
  7. 选择R中相应的在新的系列中为1的数,这些数是质数( ),结果为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 程序

'Hello, world' 

字母表

从一开始就有人批评APL使用一套特别的、非标准的字母表。学过APL的人一般很喜欢这些特别的符号,这说明当时艾佛森选择这些符号时是有一定的用意的。Unicode包含这些字母,Unicode被引入后,要寻找特别的字型的问题开始有所减缓。虽然如此依然有人批评当初APL设计时所选择的特殊的符号。这些专门为APL设计的键盘无论如何不会非常普及。

 

实现

GNU APL(页面存档备份,存于互联网档案馆)是一个自由的APL实现,它可以运行在Linux,Windows还有Mac OS X系统上。

引用

  1. ^ APL Quotations and Anecdotes. jsoftware.com. jsoftware. [April 14, 2018]. (原始内容于2020-05-09). 

外部链接

  • The APL Programming Language Source Code(页面存档备份,存于互联网档案馆

apl語言, programming, language, array, processing, language, 的缩写, 肯尼斯, 艾佛森在1962年设计这个语言时他正在哈佛大学工作, 1979年他因对数学表达式和编程语言理论的贡献而得到图灵奖, 在过去数十年的使用历史中, 从它的原始版本开始不断改变和发展, 今天的版本与1963年发表时的版本已经非常不一样了, 但它始终是一种解释执行的计算机语言, 现代的, 版本支持其初始版本不支持的结构和模式编程, 至今依然使用一种非标准化的字母表, 这一直是他人对, 的. APL 是 A Programming Language 或 Array Processing Language 的缩写 肯尼斯 艾佛森在1962年设计这个语言时他正在哈佛大学工作 1979年他因对数学表达式和编程语言理论的贡献而得到图灵奖 在过去数十年的使用历史中 APL 从它的原始版本开始不断改变和发展 今天的版本与1963年发表时的版本已经非常不一样了 但它始终是一种解释执行的计算机语言 现代的 APL 版本支持其初始版本不支持的结构和模式编程 APL 至今依然使用一种非标准化的字母表 这一直是他人对 APL 的批评 APL编程范型阵列 函数式 结构化 模块化設計者Kenneth E Iverson實作者Larry Breed 英语 Lawrence M Breed Dick Lathwell 英语 Richard H Lathwell Roger Moore 英语 Roger Moore computer scientist 等人发行时间1966年11月27日 56年前 1966 11 27 1 型態系統动态类型系统平台跨平台許可證专有 开源主要實作產品APL 360 APL 1130 APL Plus Sharp APL APL2 Dyalog APL NARS2000 APLX 英语 APLX GNU APL啟發語言数学表示法影響語言A和A FP J K LYaPAS 英语 LYaPAS MATLAB Nial 英语 Nial PPL 英语 Polymorphic Programming Language S Speakeasy 英语 Speakeasy computational environment Wolfram语言本页面包含APL語言源代码 部分操作系统及浏览器需要特殊字母与符号支持才能正確显示为APL符号 否则可能出现乱码 问号 空格等其它符号 目录 1 概述 2 APL 的 Hello World 程序 3 字母表 4 实现 5 引用 6 外部链接概述 编辑在许多应用场合下 数学 科学 工程技术 电脑设计 机器人 数据显示 保险技术 传统的数据处理等等 APL是一种非常有力的 表达丰富的和简明的编程语言 它一般被用在一个与用户接口的环境中 它最初的设计目的是将数学公式写成一种电脑可以理解的方式 学它一般很容易 但要分析 APL 写成的程序往往需要一段时间 与传统的结构式编程语言不同的是 APL 的程序一般由一系列使用在序列上的单元的或双元的函数或运算符号组成 由于APL拥有许多非标准的运算符号 这些符号之间没有优先性 比如一般数学中的乘号 除号较加号 减号有优先权 APL中没有这样的优先权 最初的APL语言没有任何控制结构如循环 do while 或者条件选择 if then else 但一些序列运算符号可以用来模拟编程结构 比如iota 用来获得一个从1至N的序列 可以用来模拟循环 for APL 的工作环境被称为工作场 在这个工作场内用户可以定义程序和数据 数据也可以在工作场在程序外存在 用户可以在程序外改变数据 比如 N 4 5 6 7 displaystyle N leftarrow 4 5 6 7 将一个系列的数据4 5 6 7授予N N 4 displaystyle N 4 输出8 9 10 11 N displaystyle N 输出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之间的质数的例子 R R R R 1 i R displaystyle left sim R in R circ times R right R leftarrow 1 downarrow iota R 下面是这个程序的读法 从右向左 i displaystyle iota 建立含有从1到R的自然数的系列 假如程序开始时R 6 那么i R displaystyle iota R 是1 2 3 4 5 6 放弃这个系列中的第一个元素 displaystyle downarrow 1 i R displaystyle 1 downarrow iota R 是2 3 4 5 6 令R成为这个系列 displaystyle leftarrow 是授值符号 令R与R相乘而组成一个矩阵 实际上是组成一个R乘R的乘法表 displaystyle circ times 建立一个长度与R相同的系列 假如R中相应位置的数在乘法矩阵中出现 那么在这个位置上的数就应该是1 否则0 displaystyle in 这个运算的结果是0 0 1 0 1 逻辑地否定的系列中的数 也就是说 1成为0 0成为1 displaystyle sim 结果是1 1 0 1 0 选择R中相应的在新的系列中为1的数 这些数是质数 displaystyle 结果为2 3 5以下是Perl语言的相应程序 perl le 1 1 x 11 1 amp amp print while 以下是J语言的相应程序 r e r r r 1 i 7APL 的 Hello World 程序 编辑 Hello world 字母表 编辑从一开始就有人批评APL使用一套特别的 非标准的字母表 学过APL的人一般很喜欢这些特别的符号 这说明当时艾佛森选择这些符号时是有一定的用意的 Unicode包含这些字母 Unicode被引入后 要寻找特别的字型的问题开始有所减缓 虽然如此依然有人批评当初APL设计时所选择的特殊的符号 这些专门为APL设计的键盘无论如何不会非常普及 实现 编辑GNU APL 页面存档备份 存于互联网档案馆 是一个自由的APL实现 它可以运行在Linux Windows还有Mac OS X系统上 引用 编辑 APL Quotations and Anecdotes jsoftware com jsoftware April 14 2018 原始内容存档于2020 05 09 外部链接 编辑The APL Programming Language Source Code 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title APL語言 amp oldid 72094005, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。