有没有比较好的APL语言学习资料?

最近读了一篇博客:APL Is The Best!

在这篇博客里,作者简单介绍了APL,并认为这个语言非常有学习的价值。

“A language that doesn’t affect the way you think about programming, is not worth knowing.” - Alan Perlis

我大致看完了整篇博客,以下是我的一些疑惑:

  1. APL 语言是否更接近汇编而非高级语言?

    比如:作者在文章的最开头引入了old style APL

    apl

    从这张图里不难看出,old style APL 似乎更接近汇编语言?现在好像很少人在写程序之前先画流程图了吧?这样的图,我只记得在学C的时候有画过,后来就再也没画过(倒是像IDA这样的反编译软件能自动导出这样的图来)。

  2. APL 语言不支持结构化编程?

    APL uses goto. If you don’t know how to write good code with goto statements, Knuth taught how to do it.

    并且作者在文末给出了几个用goto模拟if else的方法。。。

  3. APL 语言含有大量符号,该如何记忆?

    There’s no way you can remember all these symbols the first time. If you come across a symbol you can’t remember, write it down like I did here in this list:`

    理论上讲,一个语言的primitive operation应该越少越好。不是很理解为什么APL会有如此众多的符号?

  4. APL 语言是否有对应的数学理论?

    到目前为止,APL唯一能让我眼前一亮的特性是它的向量/矩阵操作。不过这些操作的背后是否有其对应的数学理论?比如:是否可能纯粹使用向量/矩阵变换来实现一般的编程需求?

  5. 希望能推荐一些APL语言的入门学习资料。

    最好是能讲 APL 语言设计背后的数学理论和编程哲学,而不是把它仅仅看成一种支持向量/矩阵运算的汇编语言。

多谢。

2 个赞

(题外话:我一直觉得 APL 的思路挺像 Backus 的 FP 的…(小声)

1 个赞

帮你 @LdBeth

1 个赞

APL 最早的用途是在 IBM 內部用来描述算法和硬件。因为这时候还不是编程语言所以就画成流程图可視化。至于用流程图在 70 年代很正常吧,TAOCP 也用流程图。

原味的没有,不过后为了推扩大受众有的实现比如 Daylog 加了。但是包括我在內一部分 APL 用户觉得还是箭头好看。

我自已设计了个 keyboard layout,因为没有给日式鍵盤设计的。然后边用边调整,设计成形后就记住了。Dyalog 有 language bar,会提示用法。

因为 APL 出现得比大多数编程语言早。你这样靠一堆比 APL 晚的语言得出的结论不管用。另外傳統 APL 鍵盤和正常的美式鍵盤符号数是一样的,只不过小写字母被換成符号了而已。傳統的 APL 不区分字母大小写。至于为什么和別人不一样,你这样问是不对的,最早的鍵盤就是 IBM 出来的,得问为什么別人不和 APL 一样。

有,见 A Programming Language。

另外 https://aplcart.info/

4 个赞

Backus 在他的 turing award lecture 说了他是 inspired by APL 的

哥,你现在还在用APL吗?你会用它来干什么事情?应用在哪?

我现在用在写信号处理和机器学习算法上,相当于做 numpy 和 matlab 的替代品

最近因为需要用到 quantum machine learning,还开始用 J 做 quantum computing 的练习题。

练习在 https://codebook.xanadu.ai 本是给 numpy 和 PennyLane 设计的。在对线性代数理解较好的情况用 APL/J 做起来也是没什么压力的