阵列语言环境虽然引人入胜,却令人困惑。是否有理由选择J或K或APL或A中的一个?这些选项似乎都不是开源的 - 是否有开源版本?我很想扩大我的思想,但我仍然感到困惑。
答案 0 :(得分:118)
这些语言之间的差异相对微妙。 APL“正确”具有原始符号表示法的优点和缺点。 (多年来对符号集进行了一些细微的改动,但它们都足以符合最初的愿景。)
A +语言是开源的。它与“经典”APL显着不同,但就像它们保留了大部分核心字符集一样。我的感觉是它没有及时更新技术变化。这是K的前身。
数组语言系列中与特殊APL字符集不同的语言包括J,K和Nial。 Nial使用英语单词而不是符号,并且有一个名为Q'Nial的开源解释器。 K和J主要依赖于符号,但这些符号是从ASCII字符集中提取的。但是,可以使用单词代替这些语言中的符号,只需指定定义即可。
自从1964年APL作为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. J和APL之间的差异在J软件维基上的一篇论文中勾勒出来。一个明显的变化是消除了数组索引语法。然而,最大的特征是默认形式,其中程序是通过组合函数编写的,而不参考它们的参数。 Tacit J与函数式编程语言中的“无点”风格密切相关,但不同之处在于这种形式是J语言的基础。 J中使用的基于ASCII的符号可能比更独特的APL字符更难阅读。
对于想要学习数组语言的个人,我的建议是在Dyalog APL,APLX,J和Q'Nial中进行选择。 Dyalog APL(尤其适用于Windows)或APLX(尤其适用于Linux)可能最适合想要使用APL特有的核心符号的人,以及希望与整个APL社区建立强大联系的人。对于那些想要构建Web应用程序,或者专注于数学(如Project Euler)的人来说,J可能是最好的,特别是那些对它强调的默契风格着迷的人。如果我的优先事项是开源的话,Q'Nial就是我所选择的,但只有当优先级不是指期望得到活跃的操作系统社区的支持时才会选择。
更新:J 7.01在GPL 3下已经released with open source code。此外还有Kona,K上的变体。这些增加了开源数组语言的选项。
Tobia更新:GNU APL可在GPL下获得。它紧跟最新发布的关于扩展APL语言的ISO标准。它是一个很好的开源APL实现,正在积极开发和维护。还有其他有趣的实现,例如ngn APL,这是一个用Coffeescript编写的令人惊讶的功能和现代的APL实现(编译为Javascript。)数组语言在2015年仍然存在。
答案 1 :(得分:11)
添加更多信息......
有K
的开源版本Kona
https://github.com/kevinlawler/kona
对于q/kdb+
,有一个试用版。 http://kx.com/download/
主要限制是2小时超时,32位内存,3个月许可证到期以及许可证本身。如果你只是想玩游戏并学习一些东西,这些不应该太麻烦。
就我个人而言,我发现q
是用户最友好的,因为KX将monadic(单个参数)动词从K
翻译成英文单词并且有大量文档@ {{3} }。此外,数据库系统经过深思熟虑和灵活。
答案 2 :(得分:7)
要考虑的是运算符的词汇表(高阶函数)。
原始APL只有最后和第一轴减少(f/
,f⌿
),最后和第一轴累计减少(f\
,f⍀
),加上内外产品(f.g
,∘.g
)。
大多数扩展APL(例如GNU APL,APLX,APL + Win,APL2)仅添加每个循环(f¨
)和轴括号规范(f[
... {{1} })。
J,添加了plethora(称为副词和连词),但删除了括号(轴和索引),每个运算符(支持更一般的秩运算符)和最后轴(累计)还原
现已解散的Sharp APL(SAX)保留了传统的最后轴操作符和括号索引,同时添加了许多J的新操作符。
Dyalog APL逐渐接近夏普APL的词汇,但也加入了J-exclusive运营商,这些运营商从未进入夏普APL。
答案 3 :(得分:3)
J是一个可执行的数学符号,使用ascii字符输入和显示。
它也是一种功能齐全的面向对象编程语言。
J的JSoftware实现(我不知道任何其他)不是开源的,但可以免费使用。
虽然引擎不是开源的,但是有一个活跃的J代码用户库,人们可以为此做出贡献。
J拥有广泛而简洁的文档http://www.jsoftware.com/help.htm,论坛成员可以快速,快速地回答任何问题或问题,并热衷于帮助新用户以及更高级的问题。
顺便说一下,在开源问题上,J的文档(规范)是广泛的,理论上任何人都可以创建一个开源项目,试图在他们想要的时候实现J。
答案 4 :(得分:2)
ELI是一种新开发的,免费提供的跨平台阵列编程语言。与J和k类似,它依赖于ASCII字符集。它实现了一些(我知道)k / q / kdb +特有的功能,例如temporal数据类型和内置SQL子集。
答案 5 :(得分:1)
虽然A +看起来(遗憾地)是一个死的项目,但是有一个新的开源APL解释器:GNU APL。
答案 6 :(得分:0)
我仍然感到困惑(APL总是让我感到困惑 - 幸运的是,自从我上次尝试使用它以来已经过了20年或更长时间),但是有点搜索已经找到A +,A的开源版本:
我不知道它会满足你(或任何人)的需求。