我感谢许多同事在审阅MSS的各种草稿时提出的一些小的更正和主要的想法,其中主要是R.Pesch、E.E.McDonnell、R.许仕仁、D.L.福克斯、J.A.Cramer、K.B.Iverson、P.Cooper、R.H.张伯伦、L.J.迪基和J.Sansom。
APL是一种正式的、命令式语言。因为它是命令性的,所以句子可以被称为指令,并且可以被执行以产生结果。在这里使用的插图中,指令将被缩进,其执行结果将显示在下面的行上,没有缩进。因此:
因为APL是形式化和明确的,所以APL可以由一台称为计算机的机器或严格地说,APL计算机或APL系统来机械地执行。由于这个原因,它也被称为编程语言,它的名字就是从这个短语派生出来的。因为它具有数学表示法的分析属性,所以也被称为分析型编程语言。
与任何活着的语言一样,APL也有方言,这在一定程度上是由使某些结构过时的进化造成的,但也是由于在其上实现APL系统的许多不同计算机的限制和特殊特性造成的。虽然本简介包括对方言的简要讨论,但读者可能会发现有必要参考特定系统的手册或国际标准化组织颁布的APL标准[1]。
APL起源于试图为与计算机应用相关的主题的教学和分析提供一致的符号,并通过在各种主题中的应用和在计算机系统中的实施而发展起来。关于语言历史的广泛讨论可以在APL的设计[2]和APL的演变[3]中找到,也可以在其中引用的出版物中找到。
字典不应该作为一种语言的介绍来阅读,而应该与其他在读者感兴趣的上下文中使用这种语言的材料一起查阅。即使是语法的一般部分,即使对初学者来说也可能是易懂的,也许也应该在接触了一定数量的其他语言之后才能学习。
另一方面,词典不应该只用来查找个别单词的意思,还应该研究一下,以获得语言的整体看法。具体地说,根据语言知识的增加,可以一次又一次有益地复习语法,并且对相关动词和副词组的研究可以揭示重要的关系,否则很容易被忽视。
除了一些本地字母表的字母,如英语(用于姓名)和十位十进制数字(用于数字和姓名)之外,APL字母表还包括6个希腊字母、54个图形符号和大约20个由一对图形符号叠加而成的复合符号。几乎所有的图形符号(至少在一个方向上)都出现在英语词典中的一些常用符号表中,例如“美国传统词典”中的符号和符号表[4]。至少有一半的人熟悉它们在英语和算术中的使用。
在大多数apl系统上,名称⎕av表示其元素包括字母表的列表。许多系统以小写和大写斜体以外的方式打印这两个英文字母,通常使用下划线的大写和大写。
每个“原始”动词和副词(即词典中定义的动词和副词)都是由单个图形、复合符号或希腊字母组成的。因此,符号与代词名称的选择并不冲突,编程语言中常用的保留字(由英语字母表中的字母表示的基元名称)也不冲突。
在任何符号的使用中,有可发音的名称是很方便的。由于同一个符号在不同的工作中通常有许多不同的用途,最著名的名称通常反映了该符号的特定用途,而不是该符号本身的名称。例如,在[4]的引用表中,给出的是⍴和×10的“电阻率”和“乘以”,而不是“希腊Rho”和“圣安德鲁十字”。
在本词典中,我们尝试为符号提供名称(在表1:字母表中)和在APL中的通用用法(第IV-VI节)。表4提供了在特定上下文中可能使用的同义词。表1的三列提供APL符号、符号名称和音译方案,用于在计算机终端设备上广泛提供的ASCII字符集[5]。最后二十五个apl符号(以⍝开头)称为复合符号,因为它们通常是通过叠加两个较简单的符号来输入的(如在∩和∘中为⍝),并且通常按组成它们的对命名(如在⊖中为圆条)。
任何语言的学生都应该警惕并利用其他语言知识提供的线索,以及符号本身的外观提供的线索。例如:
符号⌊和⌈的出现暗示了它们对Minimum和Maximum的使用,而⌊与字母L的相似性表明“Lesser Of”;↑和↓这对符号用于获取和丢弃。
希腊语-英语的对应也很重要,如在⍳中表示整数(⍳4),在⍴中表示重复(3⍴4)或重塑(2⍴⍳3⍴⍳6)。
⊥用作基值(如在10⊥1 8 6 7←→1867年中),因为它的形状表示基数,而⊤用于反函数。
∨用于或因为v是相应拉丁语vel的首字母,而∧用于和因为它与∨的图形关系。
单词是按照以下规则从左向右扫描APL字母表的字母序列而成的:
引号的处理方式与英语很相似:开始引号和结束引号之间的所有内容都构成一个单词。但是,左引号后面的一对相邻引号代表引号字符本身,并不充当右引号;';can';t';是通常用作六个字母单词';can';t';的缩写的五个字符的单词。其余规则在应用报价规则后使用。
不是本地字母表的马克龙(‘)、点(.)、四元(⎕)、空格()、数字或字母的每个字母都是单字母单词,也用作分隔符。
空格是分隔符,除非它落在两个数字之间,即以数字或马克龙开头的单词,或者以点后跟数字的单词。
单词⍺、⍵、→和$⎕中的任何一个,或者以符号⎕或本地字母表中的字母开头并以其他字母、数字、马克龙或圆点继续的单词都是一个名称,并且可以通过语法部分中讨论的系词(←)来赋值。
不是名字的单词称为令牌。记号要么没有意义,要么有固定的指称。例如,标记3.14和314e‘2和2j3有意义,但3..14和’2和';pi和2k3没有意义。
有意义的数字令牌可以是由空格分隔的两个或多个数字组成的列表,其中,数字可以是实数,也可以是由j-1分隔的两个实数形成的复数。
实数要么是简单的,要么是由e-隔开的两个简单数字形成的指数数字。一个简单的数字可以由一个或两个马克龙(代表无穷大和负无穷大)组成,也可以包含至少一个数字,最多一个点和一个马克龙(它表示负数,必须处于领先位置)。
名词,如数字3和5.6;字母字符或文字,如';+';和';A';和';a';…。
动词,如+(加法)和|(量值),作用于名词以产生也是名词的结果。一个特定动词所用的名词称为它的论元(一个在主题意义上或主语意义上采用的词)。根据动词是用于一个论元(在它的右边)还是两个论元(在它的左边和右边),它可能有两个不同的(但通常是相关的)意义。例如:
副词作用于动词或名词的副词,如//。例如,+/是一个(派生的)动词,名为PLUS,跨越它所应用的任何数字列表的总和,而×/是一个动词,它在列表的所有元素中生成乘积。当一个副词用于名词而不是动词时(如1 0 2/产生一个“选择”动词,因此1 0 2/5 8 7产生5+7/7),它很可能被称为形容词。然而,由于(在英语中)由名词产生动词的方式更多地是由后缀而不是形容词(如deify、reify和nitrify)实现的,所以我们将在所有情况下使用副词这个术语。
适用于两个参数的连词,如⍤和¨,如⌽⍤⍉(反转和转置)。连词的论元可以是动词(如上面的例子),也可以是名词(如10?⍟,意思是以十为底的对数)。
系词,由箭头←表示,用于为名词、动词、副词或连词指定名称。例如:箭头与英语中的系词“is”和“are”的作用相同;通常读作“is”,如Area←4×8←中的“Area is 4×8”,以及“(动词)sum is plus Cross”表示SUM←+/。指定给名词的名称将称为代词,而指定给动词的名称可能称为谚语(发音为长o,如“proonoun”,以区别于现有的英语单词)。
标点符号,由指定执行顺序的成对括号提供,就像它们在初等代数中所做的那样。句子必须显示在不同的行上,并且不能使用标点符号来分隔它们。
名词可以按四种独立的方式分类:数值型或字面型;记号或代词;开放式或盒式;不同等级的数组。秩0、1、2的数组具有特殊名称、项、列表和表,或者(在数学上)标量、向量和矩阵。这四种分类详述如下。
数字和文字。数字写成2、2.3和23e2(对于2300)和2J5(对于复数),负数有一个前导马克龙,如‘3.2;;文字用引号括起来,如';A';和';a';和';+#39;*。
记号和代词。已分配给名词的名称将称为代词。引用名词的记号包括“AND”和“∘”(表示无穷大、减去无限和装箱的空列表<;';';),以及其他数字项和列表(如3.4e2和2 3 4),以及文字项和列表(如';a';和';cab';)。产生名词的短语(例如3×4或⌽';ABCD';)可以称为名词短语。
数组。单个实体(如2.3或2.3j5或';A';或';+#39;)称为项目。用逗号表示的动词(称为连词或之前)链接其参数以形成一个列表,该列表的形状(由动词⍴给出)等于组合的项数。例如:
Date←1,7,7,6⍴Date 4 Word←';s&39;a';a';,';w';⍴Word 3⌽Word(⌽是动词反转)是⌽Date 6 7 7 1。
表达式s⍴l从列表l生成形状s的数组。例如:
(3,4)⍴Date,1,8,6,7,1,9,1,7 1 7 7 6 1 8 6 7 1 9 1 7表←2 3⍴Word,';b';,';a';,';t';⍴表2 3 SAW BAT。
名词形状的元素的数目被称为名词的秩;因此,秩2的名词是表,秩1是列表,秩0是项,秩3是三维或秩3数组等。此外,形状的每个位置被称为数组的轴,并且轴由索引0、1、2等引用。例如,表的轴0具有长度2,轴1具有长度3。
阵列A的最后k个轴确定阵列的秩-k个单元或k-个单元。例如,如果:
那么列表ABCD&39;是一个单元格,两个分开的3x4表格是一个单元格的2个单元格,每个单独的字母是一个单元格的0个单元格。
形状向量的其余部分被称为相对于秩为k的单元的阵列的外部形状或框架。例如,如果⍴b是2 3 4 5,则b具有相对于秩2的单元格的帧2-3(因此具有形状4 5)、相对于5元素的秩-1单元格的帧2 3 4、相对于秩0的单元格的帧2 3 4 5(即,项)、以及秩为4的单元格的空帧(表示项)。
框架中的单元格数量是其形状的乘积,如果形状中的一个或多个元素为零,则单元格数量为零;然后称该框架为零框架。由于空列表中的乘积是1%,因此空帧不是零帧。
排名比a小一的单元格被称为一个单元的大单元,大单元在名词的讨论和动词对其的应用中起着重要的作用。例如,动词from(由{表示)从其参数中选择主单元格,如下所示:
0{a 1{a zu mnop EFGH qrst ijkl uvwx 0{0{a 2 1{0{a ju ijkl EFGH 1{2{0{a j。
此外,动词等级(由⍋表示)为{提供索引,将主单元带入“词法”或“行-专业”顺序。例如:
n←4 3⍴3 1 4 2 7 9 3 2 0 3 1 4 n 3 1 4 2 7 9 3 2 0 3 1 4 g←⍋n g 1 0 3 2 g{n 2 7 9 3 1 4 3 1 4 2 0';⍋';CARE';1 0 32。
负数(如1-CELL和‘2-CELL)也用于指代其对应的帧具有由该数字的大小指示的等级的单元。例如,列表可以称为单元的2个单元格或1个单元格,而两个独立的3×4表格中的每一个都称为单元的1个单元格或2个单元格。数组的1-单元格是其主单元格,而项本身只有一个主单元格。
打开并装箱。到目前为止讨论的名词称为open,以区别于动词box(用<;表示)产生的盒装名词。box的结果是一个项,装箱的名词通常(但不一定)显示在box中。例如:
Box允许将任何数组(如表示单词的字母列表)视为单个实体。例如:
Letters←';⍴Letters 10⌽Letters我在这里看到I Words←(<;';I';),(<;';is';),(<;';Here';)⍴Words 3⌽Words(2,3)⍴Words,⌽Words|`|这里|是||。
大多数动词的正常用法都是有限的,动词通常适用的名词类别被称为它的领域。例如,动词减号(在表达式-n中)仅适用于数值参数n;而表达式-';n';n';没有意义;减号的范围仅限于数值参数。
一元和二元。大多数动词有两种定义,一种用于一元格(一个参数),另一种用于二元格(两个参数)。如果省略其中一个定义,则动词的对应大小写具有空域。在任何句子中,如果动词前面有合适的左论元,即任何本身不是连词论元的名词,则动词的二元定义也适用。否则,适用一元定义。
动词的一元格也叫单元格,我们可以说在短语?⍵?中使用的“The Monad?”,以及在短语⍺?⍵?中使用的“the二元?”。
动词的等级。动词等级的概念与名词等级的概念密切相关:一个等级为k的动词适用于其论元的每个k单元。这个概念将通过使用动词Ravel(用逗号表示)的示例来介绍,它分解整个参数以生成元素列表。因此:
A←2 3 4⍴';abcdefghijklmnopqrstuvwx;一个eFGH ijkl mnop qrst uvwx,a abcdefghijklmnopqrstuvwx
由于RAVEL应用于其整个参数,因此其秩被称为无界或无限;它还可以通过在表达式中使用秩合取⍤来应用于指定秩r的单元格⍤r。因此:
最后一个结果说明了一条一般规则:结果的形状是参数的框架(相对于动词应用到的单元),与将动词应用于单个单元所产生的形状相关联。通常情况下,这些单个形状是一致的,但如果不一致,则首先将它们设置为如下所示的共同形状:
如果等级不同,则通过重塑每个参数来引入领导单位长度,从而使它们达到共同的最大等级mr。形式上,单个结果a由(u,⍴a)⍴a代替,其中u←(Mr-⍴⍴a)⍴1。
如果各个形状不同(在达到共同的等级之后),则通过表达式ms↑a-1将每个形状变为共同的形状,其中ms是形状上的最大值。因此,如果形状是S1、S2和S3,则Ms←S1⌈S2⌈S3是。例如,⍳⍤0(2 3 4)的单个结果为0 0 1和0 1 2和0 1 2 3;总体结果为表:0 1 0 0 0 1 2 0 0 1 2。
零帧(其没有可以应用该函数的单元格)的情况通常如下处理:通过将该函数应用于具有该自变量单元格所需形状的代理自变量来确定单个结果的形状。例如,如果⍴m为0 5 4,则案例⌹m的单个结果形状为4 x 5,整个结果的形状为0 4 5。如果各个结果形状对于不同的合适代理参数可以不同,则认为它是所有代理参数中最小的形状。例如,如果⍴m为0×3,则⍳m的单个结果形状的秩为1,形状为0。整体结果的形状为00%。
动词的并元格有两个等级,左等级控制其左参数的单元等级,右等级控制其右参数的单元等级。例如:
p←';t q←3 4⍴';q唤醒阅读灯p,⍤0 1q清醒面包夹。
最后,每个动词有三个内在等级,一元等级、左边等级和右边等级。这一事实往往简化了动词的定义。例如,⌽的一元情况被定义为具有等级1,因此它足以定义其在列表上的行为,例如,如⌽';abc&39;←→';和⌽1-2-3-←→3-2-1所示。因此,⌽对更高等级的参数的应用是完全定义的。例如:
堕落的案例。动词的等级只是对它所应用的单元的等级设置了一个上限,它的域可以包括比其名义等级低的等级的论元。例如,⌽的排名为1位,但其域名还包括如下项目s:s≡⌽s s。类似地,⌹(矩阵逆)的秩为2,但被扩展为列表和项参数,如下所示:(⌹a)≡⌹⍪⊃a表,其中表函数⍪从列表或项参数形成一个单列表。
协议。动词并元格的两个参数必须在以下意义上一致:左框架和右框架(相对于特定动词)必须相同,除非如果一个框架是空列表,则单个对应的单元格与另一个参数的每个单元格一起用作参数。
例如,如果q←3 4⍴';wakereadlight';和p←';abc';(与前面使用派生动词⍤0-1的示例相同),则在。
..