迪杰斯特拉评 APL:工具塑造使用者,附 APL 形式化操作示例与符号总结
迪杰斯特拉关于 APL 的一封信
尼克·尼科洛夫让作者注意到迪杰斯特拉对 APL 的评价,作者联系网站作者获得迪杰斯特拉信件副本并转录。信件中,迪杰斯特拉于 1982 年 1 月 12 日回复 A·卡普林博士 1981 年 5 月 31 日(?)的来信。他认为 APL 有“狂热追随者”,有人推崇有人厌恶,中立者少。多数人潜意识明白“易用性”非最重要,工具会塑造使用者,很多人回避 APL 是反感其对使用者的影响。
例如,APL 使用者与 APL 实现紧密相连,如美国大学客座教授教授 APL 时抱怨没 APL 终端就无法授课,而卡普林博士也希望见面“演示 APL”,这与喜欢用铅笔和纸演示的编程语言使用者形成对比。印刷或书写文字不是传播 APL 的合适媒介,这或可解释 APL 相对孤立及是其主要缺点。迪杰斯特拉还好奇卡普林博士的学科博士学位。
作者认为迪杰斯特拉的评论有讽刺意味,因肯·艾弗森发明符号系统是为促进交流,后来才成为 APL,且迪杰斯特拉在 1963 年 8 月前就接触“艾弗森符号”。作者读迪杰斯特拉编号为 EWD 的文章,认为 APL 对他应是自然选择。作者若教授 APL 课程没 APL 机器会苦恼,而形式化方法课程没机器也可应付,但可执行性是优势。
APL 形式化操作示例
示例 0:阿克曼函数。该推导最早于 1992 年在 J 语言出现,转录为 Dyalog APL 语言。阿克曼函数定义在非负整数上,给出了函数定义及部分计算结果。还给出引理并通过对 `⍵` 归纳证明,最后使用引理证明了一系列等式。
示例 1:倒置表的索引查找。该示例在 2013 年 Dyalog 会议展示。表是按行和列组织的值,扩展索引查找可找到记录索引。倒置表是将列中值收集在一起的表,可与普通表相互转换,倒置表列访问速度快。推导出更高效的倒置表索引查找计算方法,函数 `{(⍳⍉⍺⍳¨⍺)⍳(⍳⍉⍺⍳¨⍵)}` 可计算倒置表的索引查找。
符号总结
列出本文使用的 APL 符号及含义,如 `←→` 表示等价(元语言)、`←` 表示赋值等。完整语言参考可在 [6] 中找到,D 函数在 [6, 第 112 - 127 页] 和 [7] 中有描述。
