标签: dyalog

APL中快速排序的解释

我试图理解 APL 中的经典快速排序:

\n\n
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\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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

有些事情我不明白,有些风格选择困扰我,所以我要把它们全部列出来。我希望有人可以向我解释它们。

\n\n
    \n
  1. 我知道在{ }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
  2. \n
\n\n

我的猜测是,\xe2\x8d\xba里面的S指的是 的左边参数S。the\xe2\x8d\xba\xe2\x8d\xba指的是封闭函数\xe2\x8d\xba的 的(即Q 的 )。\xe2\x8d\xba

\n\n
    \n
  1. 为什么要大量使用通勤(\xe2\x8d\xa8)?代码写成这样是不是更清晰了:
  2. \n
\n\n
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]}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我能想到的使用 commute …

quicksort in-place apl dyalog

5
推荐指数
1
解决办法
502
查看次数

Dyalog APL:如何编写可以执行的独立文件?

我现在知道如何使用 APL 解释器,但我对如何将 APL 写入文件然后运行该文件感到非常困惑。我目前使用RIDE编写 Dyalog APL 。我现在想做的是:

  1. 使用 RIDE 开发程序(我如何访问键绑定?)。
  2. 将我的程序保存到文件中。
  3. 使用命令行参数从命令行运行程序(如何获取命令行参数?)
  4. 分发我的程序以便其他人可以使用它们。

大多数在线文档都提到“APL 会话”,这让我觉得可能存在一些类似 Smalltalk 的东西,人们只能分发“实时图像”或类似的东西。如果是这样的话,我有一组不同的问题:

  1. 如何保存和加载这些图像文件?
  2. 如何分发图像文件?
  3. 我可以从命令行执行此类代码以获取命令行参数吗?

总的来说,我对如何用APL编写软件感到很困惑!

我使用的是 Ubuntu,一般来说我想以 Linux 为目标。Windows/macOS 支持将是一个优势,但我目前对 Linux 支持感兴趣。

executable software-distribution apl dyalog command-line-arguments

5
推荐指数
1
解决办法
1763
查看次数

了解 APL 的内积

以下是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)

matrix apl dyalog matrix-multiplication

4
推荐指数
2
解决办法
540
查看次数

GNU APL和Dyalog APL中的分区行为

在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)

arrays split apl dyalog gnu-apl

4
推荐指数
1
解决办法
454
查看次数

Dyalog APL - 禁用 APL 符号输入

我最近获得了 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

keyboard keyboard-shortcuts key-bindings apl dyalog

4
推荐指数
1
解决办法
1098
查看次数

Dyalog APL 中的并行会话

至少有一种单字母语言(当然q)具有进程间通信的功能,这是一种在多台计算机上并行执行长时间运行的进程的方法。这些会话可以位于同一台计算机上,也可以位于不同大陆的服务器上。

使用 q,我只需启动一个服务器来侦听特定端口(例如 )q -p 8510,然后从另一个 q 会话或其他软件访问它。令人印象深刻的简单。

我记得,在很遥远的过去,我使用大型机 APL 系统,Shared Variables可以与其他用户共享变量。这可能是IBM APL.SV。当时我并没有想太多,但几十年后的今天,这Shared Variables听起来像是并行会议的基础。与另一台计算机共享变量。

我今天如何能够或将使用 Dyalog APL 或任何其他 APL 来做到这一点,我可以

  • 在另一台物理计算机上调用 APL 会话

  • 向其发送命令或表达式

  • 收到结果

  • 可能会在许多其他计算机上并行执行此操作

apl dyalog

4
推荐指数
1
解决办法
294
查看次数

如何在 Dyalog APL 中将三元组向量转换为 3xnx3 矩阵?

我有一个包含 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)

哪个做我想要的 - 但我可以直接塑造矢量吗?

vector apl multidimensional-array dyalog reshape

4
推荐指数
1
解决办法
111
查看次数

APL:数组的元素替换和乘法

假设用 APL 语言,我有一个形状为 10x3 的 2D 数组。我不知道如何:将整个数组中出现的所有特定数字(例如 1、2、3、4)分别替换为 0、10、100、1000。所以我想将整个数组中的1映射到0、2映射到10、3映射到100、4映射到1000。

matrix apl multidimensional-array dyalog array-replace

4
推荐指数
1
解决办法
632
查看次数

如何屏蔽 APL 中的扫描操作符?

假设我有一个数组N \xe2\x86\x90 0 0 0 1 1 1 0 0 1,我如何应用扫描\\来实现数组0 0 0 1 2 3 0 0 1

\n

+\\N给了我0 0 0 1 2 3 3 3 4这不是我想要的。

\n

+\\\xc2\xa8\xe2\x8a\x86\xe2\x8d\xa8N给我| 1 2 3 | 1 |哪个更接近,但随后我失去了位置。

\n

有没有办法在扫描和乘法中携带原始值,或者也许有更好的方法?

\n

apl dyalog

4
推荐指数
2
解决办法
240
查看次数

3
推荐指数
1
解决办法
144
查看次数