数组语言的风景虽然引人入胜,但却令人迷惑不已。是否有理由选择J或K或APL或A中的一个?这些选项似乎都不是开源的-是否有开源版本?我很想扩大自己的想法,但我仍然很困惑。
Answers:
这些语言之间的差异相对较细。APL“适当”具有原始符号表示法的优点和缺点。(这些年来,符号集进行了一些细微的更改,但对于原始视觉而言,它们都是真实的。)
A +语言是开放源代码。它与“经典” APL明显不同,但就像它们保留了大多数核心字符集一样。我的感觉是,它并没有跟上技术的变化。它是K的前身。
数组语言家族中与独特的APL字符集不同的语言包括J,K和Nial。Nial使用英语单词代替符号,并拥有一个名为Q'Nial的开源解释器。K和J主要依赖于符号,但是这些符号是从ASCII字符集得出的。但是,仅通过分配定义即可用单词代替这些语言中的符号。
自从APL在1964年作为IBM产品首次出现以来,APL编程语言家族就一直是专有的。目前,专有数组语言似乎比开源替代品具有更多的支持和新功能的更快发展。我不确定所有竞争对手如何相互抗衡,但是Dyalog APL确实一直在积极地努力促进其作为当前技术的语言实现。APL2000提供了适用于Unix,Linux和Windows的产品,包括适用于.Net的VisualAPL(已淘汰)。MicroAPL Ltd提供APLX(已淘汰)。
K是一种专门的语言,不再单独销售。相反,Kx Systems营销Kdb +数据库及其Q(查询)语言,两者均用K编写。这是一个功能强大的专业工具,旨在对流数据进行高速处理。它与原始的APL方法大不相同。Kx Systems产品价格昂贵,其用户大多从事财务工作。
APL是由Ken Iverson设想并主要设计的。在将APL应用于商业应用程序并进行完善的整个职业生涯之后,他转向进行“合理化”修订的任务,该修订版纠正了他多年来对自己不满意的语言的某些方面。这个主题的新概念称为J。JSoftware Wiki上的一篇论文中概述了J和APL之间的区别。一项显着的变化是消除了数组索引语法。但是,最大的功能是默认形式,即程序是通过编写函数而不参考其参数来编写的。隐性J与功能编程语言中的“无点”样式密切相关,但是不同之处在于这种形式是J语言的基础。
对于想学习数组语言的个人,我的建议是在Dyalog APL,APLX,J和Q'Nial中进行选择。Dyalog APL(尤其是Windows)或APLX(特别是Linux)对于那些希望使用APL如此独特的核心符号,并且希望与APL社区紧密联系的人来说,是最好的选择。对于那些想要构建Web应用程序或专注于数学的人(例如Project Euler),J尤其是特别适合那些对它所强调的默认样式着迷的人。如果我的优先级是开放源代码,那么我会选择Q'Nial,但前提是该优先级并不意味着希望获得活跃的OS社区的支持。
更新:J 7.01已在GPL 3下与开放源代码一起发布。此外,还有Kona,这是K的变体。这些增加了开放源代码数组语言的选项。
Tobia更新:GNU APL在GPL下可用。它严格遵循关于扩展APL语言的最新发布的ISO标准。这是一个很棒的开源APL实施,正在积极地开发和维护。还有其他有趣的实现,例如ngn / APL,这是用CoffeeScript(可编译为JavaScript)编写的APL的功能强大且现代的实现。数组语言在2015年仍然存在并且很好。
Adám的最新消息:J的主要实现者和设计师之一的Roger Hui从此加入Dyalog,在他的指导下,Dyalog APL添加了许多受J启发的功能。这包括默认的函数式编程样式以及一些运算符和函数,其中许多已在此过程中得到了改进。Dyalog APL现在可免费用于非商业用途。另外,一些新的APL实现已经出现。请参阅aplwiki.com。数组语言在2020年仍然存在并且发展良好。
∇
)。
要添加更多信息...
有一个K
名为https://github.com/kevinlawler/kona的开源版本。Kona
对于q/kdb+
,有一个试用版。http://kx.com/download/
主要限制是2小时超时,32位内存,3个月的许可证到期以及许可证本身。如果您只是想玩转和学习一些东西,这些应该不会太麻烦。
就我个人而言,我发现q
自从KX将monadic(单参数)动词从翻译K
成英语单词以来,它对用户最友好,并且在@ http://code.kx.com上有大量文档。另外,数据库系统是经过深思熟虑且灵活的。
需要考虑的是运算符的词汇(高阶函数)。
原始APL只有最后和第一轴减速(倍)( ,f/
),f⌿
最后和第一轴累积压下(f\
,f⍀
),加上内和外产物(f.g
,∘.g
)。
大多数扩展的APL(例如GNU APL,APLX,APL + Win,APL2)仅添加each- loop(f¨
)和轴括号规范(f[
... ]
)。
J,增加了过多的内容(称为副词和连词),但删除了方括号(包括轴和索引),每个运算符(有利于更一般的秩运算符)和最后一个轴(累积)。
现在已经停产的Sharp APL(以及后来的SAX)保留了传统的最后轴运算符和括号索引,同时增加了J的许多新运算符。
Dyalog APL正在逐渐接近Sharp APL的词汇表,但也将从未使用过的J专有运算符合并到Sharp APL中。
下表比较了J,Sharp APL和Dyalog APL组成词汇。带有褪色文本的条目需要两个符号才能生效。建议使用灰色背景的条目。
J是一种可执行的数学符号,使用ASCII字符输入和显示。
它也是一种成熟的功能性,面向对象的编程语言。
J的JSoftware实现(我不知道其他任何实现)不是开源的,但是可以免费使用。
尽管该引擎不是开源的,但是人们可以为J代码提供一个活跃的用户库。
J拥有大量简明的文档http://www.jsoftware.com/help.htm,论坛成员愉快而快速地回答任何问题,并热衷于帮助新用户适应新问题以及更高级的问题。
顺便说一下,在开源问题上,J的文档(规范)非常广泛,理论上任何人都可以创建一个开源项目来尝试实现J。
我也仍然感到困惑(APL一直困扰着我-幸运的是,自从我上一次尝试使用它以来已经有20年或更长时间了),但是经过一番搜索,发现了A +的开源版本:
我不知道它会满足您(或任何人)的需求。