我试图理解 APL、J、K,这有点令人沮丧,因为:
大多数书籍都是关于 APL 的,但很少有 APL 实现,而且我没有奇怪的键盘。
K 似乎已被 Q 取代
J好像没有
我几乎觉得我在盯着 Common Lisp、Guile、Gambit、Chicken、SBCL ——当我真正想要的是看到一个方案评估器的两页时。
因此,我的问题是:是否有一个简短的(比如约 50 页)文档来讨论 APL/J/K 的核心,例如:
其评价模型
它的解析模型(因为左/右优先级似乎很重要)
它的语法
谢谢!
我认为您在“J 似乎没有……”上落后了,所以我不知道您是否已经找到了我将要链接到的所有内容并在上面将其忽略。
我的背景是非常广泛的语言范式和 APL/J/Q/K 集的粉丝,我选择将大部分时间花在使用 J 上。也就是说,鉴于 J 是由同样是 APL 成名的 Ken Iverson,事实证明,很多相同的想法都进入了它。我什至发现,在应用了非常简单的音译工作后,关于 APL 的旧论文似乎也适用于 J。
低级引用
最好的低级 J 参考(在解析、评估、语法甚至其内部数据结构原语的级别)是一组随 J 的开源分发提供的 HTML 文件。
您可以在线浏览:这里。
更高级别的介绍内容
这篇博文实际上是关于 J 思考事物方式的非常好的速成课程。
除此之外,我还发现jsoftware.com上特别有 2 本书很好地介绍了 J 编程:
J 编程语言核心的“经典”语句是 Dictionary。我认为它是为该语言发布的最古老文档的一部分,但今天使用的版本已保持最新。
在网络上,可以在以下目录的第三列中找到该词典:http: //www.jsoftware.com/help/dictionary/contents.htm
作为该语言的标准软件安装的一部分,安装了相同的文档。帮助系统将允许您访问该本地副本,或者您可以使用操作系统文件系统直接访问该文档。
没有什么可以取代这些信息。这是关于J的最权威的信息。
Ken Iverson的《A Dictionary of APL》是一份出色的文档。虽然很短,但它不是一个很好的语言教程,但它是一个很好的参考。它是在 J 和 A 和 K 等后来的方言出现之前编写的,但它讨论了 APL2 不同版本中的一些常见变体。
由于其悠久的历史,APL 在风格和特性上经历了几次根本性的变化。
因此,不应该因为不符合 ASCII 而对 APL 太苛刻,因为它比 ascii 早了将近十年。它早于信息交换标准代码的想法。不同的机器是不同的。这是上世纪 50 年代。
上世纪 60 年代,艾弗森和工作人员受雇于 IBM,IBM 可以投入一些特殊的硬件和制造来实现所需的特殊字符(当时 IBM 本身还不是一个“ascii”城镇,而是使用了几种 EBCDIC 代码)。
APL 最初被称为“艾弗森表示法”。Ken Iverson 将其创建为一种工具,用于以计算机可以执行的形式表达代数语句。作为符号的第一个用途之一是 IBM 的 System\360 规范。
对于解析模型,考虑到大量的原始函数,APL 设计者决定严格从右到左的优先级以避免混淆。APL 开发时的其他编程语言具有算术层次结构,例如在不需要括号的加法之前发生乘法。对 APL 施加这样的层次结构会使其无法使用。从右到左的优先级有两个例外:数组索引和括号的使用。
APL 的语法是为了一致性而设计的。用户定义的函数以与原语相同的方式接受参数,并使用相同的从右到左的层次结构进行评估。