我试图理解 APL 中的经典快速排序:
\n\nQ\xe2\x86\x90{1\xe2\x89\xa5\xe2\x89\xa2\xe2\x8d\xb5:\xe2\x8d\xb5 \xe2\x8b\x84 S\xe2\x86\x90{\xe2\x8d\xba\xe2\x8c\xbf\xe2\x8d\xa8\xe2\x8d\xba \xe2\x8d\xba\xe2\x8d\xba \xe2\x8d\xb5} \xe2\x8b\x84 \xe2\x8d\xb5((\xe2\x88\x87<S)\xe2\x8d\xaa=S\xe2\x8d\xaa(\xe2\x88\x87>S))\xe2\x8d\xb5\xe2\x8c\xb7\xe2\x8d\xa8?\xe2\x89\xa2\xe2\x8d\xb5}\nRun Code Online (Sandbox Code Playgroud)\n\n有些事情我不明白,有些风格选择困扰我,所以我要把它们全部列出来。我希望有人可以向我解释它们。
\n\n{ }defn 中,\xe2\x8d\xba是左参数,\xe2\x8d\xb5是右参数。\xe2\x8d\xba\xe2\x8d\xba里面是什么 S\xe2\x86\x90{\xe2\x8d\xba\xe2\x8c\xbf\xe2\x8d\xa8\xe2\x8d\xba \xe2\x8d\xba\xe2\x8d\xba \xe2\x8d\xb5}?同样,有一个\xe2\x8d\xb5\xe2\x8d\xb5? \xe2\x8d\xba里面的是S指 的左参数S还是 的左参数Q? 我的猜测是,\xe2\x8d\xba里面的S指的是 的左边参数S。the\xe2\x8d\xba\xe2\x8d\xba指的是封闭函数\xe2\x8d\xba的 的(即Q 的 )。\xe2\x8d\xba
\xe2\x8d\xa8)?代码写成这样是不是更清晰了:Q\xe2\x86\x90{1\xe2\x89\xa5\xe2\x89\xa2\xe2\x8d\xb5:\xe2\x8d\xb5 \xe2\x8b\x84 S\xe2\x86\x90{(\xe2\x8d\xba \xe2\x8d\xba\xe2\x8d\xba \xe2\x8d\xb5)\xe2\x8c\xbf\xe2\x8d\xba} \xe2\x8b\x84 \xe2\x8d\xb5((\xe2\x88\x87<S)\xe2\x8d\xaa=S\xe2\x8d\xaa(\xe2\x88\x87>S))\xe2\x8d\xb5[?\xe2\x89\xa2\xe2\x8d\xb5]}\nRun Code Online (Sandbox Code Playgroud)\n\n我能想到的使用 commute …
我现在知道如何使用 APL 解释器,但我对如何将 APL 写入文件然后运行该文件感到非常困惑。我目前使用RIDE编写 Dyalog APL 。我现在想做的是:
大多数在线文档都提到“APL 会话”,这让我觉得可能存在一些类似 Smalltalk 的东西,人们只能分发“实时图像”或类似的东西。如果是这样的话,我有一组不同的问题:
总的来说,我对如何用APL编写软件感到很困惑!
我使用的是 Ubuntu,一般来说我想以 Linux 为目标。Windows/macOS 支持将是一个优势,但我目前对 Linux 支持感兴趣。
executable software-distribution apl dyalog command-line-arguments
以下是Mastering Dyalog APL书中关于内部积的章节的摘录:
HMS is a variable which contains duration in Hours, Minutes, and Seconds: HMS ? 3 44 29 Chapter J – Operators 397
We would like to convert it into seconds. We shall see 3 methods just now, and a 4th
method
will be given in another chapter.
A horrible solution (3600×HMS[1]) + (60×HMS[2]) + HMS[3]
A good APL solution +/ 3600 60 1 × HMS
An excellent solution with Inner Product 3600 …Run Code Online (Sandbox Code Playgroud) 在Dyalog APL中,有?ML哪些更改了分区的运行方式.什么时候?ML?0
(5 ? 1 0) ? 5 5 ? ?25
????????????????????????
? ??????? ??????? ???? ?
? ? 1 2? ? 3 4? ? 5? ?
? ? 6 7? ? 8 9? ?10? ?
? ?11 12? ?13 14? ?15? ?
? ?16 17? ?18 19? ?20? ?
? ?21 22? ?23 24? ?25? ?
? ?~????? ?~????? ?~?? ?
????????????????????????
Run Code Online (Sandbox Code Playgroud)
对于(5 ? 1 0) ? 5 5 ? ?25 GNU APL中的相同语句
????????????????
???? …Run Code Online (Sandbox Code Playgroud) 我最近获得了 Dyalog APL 的个人许可证并开始使用它(我从 APLX 切换过来)。我真的很喜欢它,但只要我不使用 IDE,APL 符号键绑定就会持续存在。例如,如果我尝试通过按 CTRL-Z 来撤消另一个应用程序中的某些内容,我将得到 \xe2\x8a\x82 并且撤消将不会完成。同样,尝试使用 CTRL-S 保存文档将导致我输入 \xe2\x8c\x88 而不是保存。我能够解决此问题的唯一方法是重新启动计算机。
\n\n在 IDE 未聚焦或已关闭后,如何禁用 APL 符号输入?如果没有办法做到这一点,是否可以将符号快捷方式映射到 ALT 而不是 CTRL?作为快捷方式,ALT 的使用频率远远低于 CTRL,所以我可以接受这一点。
\n\n我使用的是 Windows 8.1 64 位和带有美式键盘的 64 位版本 Dyalog APL。
\n至少有一种单字母语言(当然q)具有进程间通信的功能,这是一种在多台计算机上并行执行长时间运行的进程的方法。这些会话可以位于同一台计算机上,也可以位于不同大陆的服务器上。
使用 q,我只需启动一个服务器来侦听特定端口(例如 )q -p 8510,然后从另一个 q 会话或其他软件访问它。令人印象深刻的简单。
我记得,在很遥远的过去,我使用大型机 APL 系统,Shared Variables可以与其他用户共享变量。这可能是IBM APL.SV。当时我并没有想太多,但几十年后的今天,这Shared Variables听起来像是并行会议的基础。与另一台计算机共享变量。
我今天如何能够或将使用 Dyalog APL 或任何其他 APL 来做到这一点,我可以
在另一台物理计算机上调用 APL 会话
向其发送命令或表达式
收到结果
可能会在许多其他计算机上并行执行此操作
我有一个包含 9000 个整数元素的向量,其中每组 9 有 3 个我想分开的子组,从而产生一个形状为 3 1000 3 的矩阵。这是我所做的:
?IO?0
m?(9÷??data) 9?data
a?m[;0 1 2]
b?m[;3 4 5]
c?m[;6 7 8]
d??a b c
Run Code Online (Sandbox Code Playgroud)
哪个做我想要的 - 但我可以直接塑造矢量吗?
假设用 APL 语言,我有一个形状为 10x3 的 2D 数组。我不知道如何:将整个数组中出现的所有特定数字(例如 1、2、3、4)分别替换为 0、10、100、1000。所以我想将整个数组中的1映射到0、2映射到10、3映射到100、4映射到1000。
假设我有一个数组N \xe2\x86\x90 0 0 0 1 1 1 0 0 1,我如何应用扫描\\来实现数组0 0 0 1 2 3 0 0 1?
+\\N给了我0 0 0 1 2 3 3 3 4这不是我想要的。
+\\\xc2\xa8\xe2\x8a\x86\xe2\x8d\xa8N给我| 1 2 3 | 1 |哪个更接近,但随后我失去了位置。
有没有办法在扫描和乘法中携带原始值,或者也许有更好的方法?
\n我有兴趣将许多APL 字体与Dyalog APL 的远程 IDE一起使用。
如何更改 RIDE 中的字体?
apl ×10
dyalog ×10
matrix ×2
arrays ×1
dyalog-ride ×1
executable ×1
gnu-apl ×1
in-place ×1
key-bindings ×1
keyboard ×1
quicksort ×1
reshape ×1
split ×1
vector ×1