标签: dyalog

我在哪里可以学习APL?

我想学习APL(更具体地说是Dyalog APL),但我似乎找不到任何好的资料来学习.

我能找到的唯一来源是Dyalog的文档下载,但除此之外,任何人都可以推荐一个好的来源吗?

apl dyalog

10
推荐指数
1
解决办法
2712
查看次数

秩操作符与轴符号

几年前我在主机上偷看了APL2,并记得为向矩阵添加矢量的问题展示了解决方案.

鉴于a?4 4 ? ?16?io?1

向行添加向量的旧方法就像

a+(?a)?10 20 30 40
Run Code Online (Sandbox Code Playgroud)

导致

11 22 33 44
15 26 37 48
19 30 41 52
23 34 45 56
Run Code Online (Sandbox Code Playgroud)

并将向量添加到矩阵的列中

a+(4 1?10 20 30 40)[;1 1 1 1]
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意,

a+4/4 1?10 20 30 40
Run Code Online (Sandbox Code Playgroud)

导致

11 12 13 14
25 26 27 28
39 40 41 42
53 54 55 56
Run Code Online (Sandbox Code Playgroud)

幸运的是,我能够打电话给那天给我看APL2的那个人(他已经退休但仍然接听了他的电话)并询问了第二个解决方案,他立即记得我在说什么.

新的APL2方式更加简洁,简洁,一致,这些例子可以通过a+[2] 10 20 30 40和解决a+[1] 10 20 30 40.凉.它在Dyalog工作.

快进十年或更长时间,我看到有一个名为The Rank Operator的新东西.第一个例子可以通过解决a(+?1) …

apl dyalog

6
推荐指数
1
解决办法
334
查看次数

APL 中的错误处理

\n我目前正在为一个类开发 APL 程序,并且遇到了错误处理问题。

\n\n

在我制作的函数中,我想检查输入是否是整数。如果不是,我想返回错误消息并且不运行函数的其余部分。到目前为止,我比较它是否等于它本身的下限。如果没有,我不希望该函数运行并希望它停止。如果我输入并给出错误消息,它会起作用,但如果我输入类似or 的内容并仅给出正常错误,则它4.2不起作用。我尝试制作一个 try catch 语句,但是当它进入我的函数时它给了我一个错误。\'A\'\'ABCDEF\':Try

\n\n

这不是我想要的。如果输入是字符或字符串,如何使函数以错误消息结束而不是继续?我知道我可以将整个代码放在 if 块中,但这似乎确实没有必要。

\n\n

我的纯文本代码:

\n\n
 TESTER Q;error\n :If Q\xe2\x89\xa2\xe2\x8c\x8aQ\n     \'Possible\'\n :Else\n     \'Not Possible\'\n :EndIf\n \'Again, Possible\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

作为屏幕截图:

\n\n

截屏

\n

error-handling apl dyalog

6
推荐指数
1
解决办法
487
查看次数

`{??}` 和 `?` 有什么不同?

我正在阅读 Hui 和 Kromberg 最近的“自 1978 年以来的 APL”,在?(模板)的讨论中,他们给出了以下示例:

      {??}?5?'abcde'
   abc   abcd  abcde  bcde   cde
Run Code Online (Sandbox Code Playgroud)

为什么{??}需要的只是??我对 APL 还是很陌生,但我天真地认为,一般来说{f?}应该等同于fmonadically 调用。

根据经验,我可以看到情况并非如此:

      ??5?'abcde'
DOMAIN ERROR
      ??5?'abcde'
      ?
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么。

arguments variadic-functions apl dyalog

6
推荐指数
1
解决办法
122
查看次数

不需要:APL 键盘覆盖已启用?

我一直在尝试APL。我运行的是 Windows 10,并且已安装 Dyalog 18.0 以及 VS Code 的 APL 语言和 APL 反引号符号扩展。

\n

但即使我没有运行任何这些程序,有时我的键盘会突然被劫持!我的所有 ctrl 命令都被 APL 符号替换。\n例如 ctrl-Z(撤消)变为 \xe2\x8a\x82,ctrl-A(全选)变为 \xe2\x8d\xba。我不知道为什么以及如何再次禁用它。这让我的工作变得非常困难!

\n

我一直在谷歌搜索这个问题,但到目前为止还没有找到答案。我查看了 Windows 键盘设置,但看起来很正常。区域设置也正确。\n我现在只是卸载所有内容,但这样我每次想尝试 APL 时都需要重新安装。

\n

有人可以告诉我发生了什么事以及如何解决它吗?(并告诉我该向谁抱怨这是一个非常敌对的功能)

\n

keyboard key-bindings apl dyalog vscode-extensions

6
推荐指数
2
解决办法
593
查看次数

在 APL 中声明多行函数时出现问题

#!/usr/bin/dyalog -script\n\xe2\x8d\x9d /usr/bin/dyalog is a symlink to /opt/mdyalog/18.0/64/unicode/mapl\n\nfactors\xe2\x86\x90{\xe2\x8e\x95ML \xe2\x8e\x95IO\xe2\x86\x901 \xe2\x8b\x84  \xe2\x8d\xb5{ \xe2\x8d\xb5,(\xe2\x8d\xba\xc3\xb7\xc3\x97/\xe2\x8d\xb5)~1}\xe2\x88\x8a\xe2\x8d\xb5{(0=(\xe2\x8d\xb5*\xe2\x8d\xb3\xe2\x8c\x8a\xe2\x8d\xb5\xe2\x8d\x9f\xe2\x8d\xba)|\xe2\x8d\xba)/\xe2\x8d\xb5}\xc2\xa8\xe2\x8d\xac{nxt\xe2\x86\x90\xe2\x8a\x83\xe2\x8d\xb5 \xe2\x8b\x84 msk\xe2\x86\x900\xe2\x89\xa0nxt|\xe2\x8d\xb5 \xe2\x8b\x84 \xe2\x88\xa7/1\xe2\x86\x93msk:\xe2\x8d\xba,\xe2\x8d\xb5 \xe2\x8b\x84 (\xe2\x8d\xba,nxt)\xe2\x88\x87 msk/\xe2\x8d\xb5}\xe2\x8d\xb5{ (0=\xe2\x8d\xb5|\xe2\x8d\xba)/\xe2\x8d\xb5}2,(1+2\xc3\x97\xe2\x8d\xb3\xe2\x8c\x8a0.5\xc3\x97\xe2\x8d\xb5*\xc3\xb72),\xe2\x8d\xb5}\nfactors 20\n
Run Code Online (Sandbox Code Playgroud)\n

从https://dfns.dyalog.com/c_factors.htm复制\n它的工作原理与示例完全相同,除了我无法将其作为单独的行输入并且必须求助于\xe2\x8b\x84\'s

\n

使用该示例会导致

\n
./.local/src/sandbox/apl/Main.apl                                                                                                                                                                                                     \nSYNTAX ERROR\n factors\xe2\x86\x90{\xe2\x8e\x95ML \xe2\x8e\x95IO\xe2\x86\x901          \xe2\x8d\x9d Prime factors of \xe2\x8d\xb5.\n
Run Code Online (Sandbox Code Playgroud)\n

另一个问题是使用像或 这样]的命令\n使用它们总是会导致]display]box on

\n
./.local/src/sandbox/apl/Main.apl                                                                                                                                                                                                     \n\nVALUE ERROR: Undefined name: \xe2\x8e\x95SE.UCMD\n
Run Code Online (Sandbox Code Playgroud)\n

scripting apl dyalog

6
推荐指数
1
解决办法
217
查看次数

在 Dyalog 中创建闭包向量

我想定义一个带有单个参数的匿名函数向量,然后在该向量上映射一个参数,返回每个索引x的结果数组。f(x)这在 Dyalog 中可能吗?

\n\n

我问这个问题是因为我天真的尝试创建这样一个闭合向量:

\n\n
fs \xe2\x86\x90 {\xe2\x8d\xb5\xc3\x972} {\xe2\x8d\xb5\xc3\x974} {\xe2\x8d\xb5\xc3\x978}\n
Run Code Online (Sandbox Code Playgroud)\n\n

行为奇怪。尝试引用fs看似引用所有索引的单个索引并导致输出混乱:

\n\n
 fs[1]\n   \xe2\x88\x87{\xe2\x8d\xb5\xc3\x972}\n \xe2\x88\x87       \xe2\x88\x87{\xe2\x8d\xb5\xc3\x974}\n \xe2\x88\x87       \xe2\x88\x87{\xe2\x8d\xb5\xc3\x978}\n \xe2\x88\x87  [ 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x8d\xb4fs返回类似的输出而不是 3,让我相信我根本没有创建数组。解决这个问题的正确方法是什么?

\n

apl dyalog

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

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 中的函数向量

APL 中函数向量(数组)的语法是什么?

我尝试过以下操作,但它们分别被解释为 3 列和 2 列:

{1},{2}
Run Code Online (Sandbox Code Playgroud)
{1} {2}
Run Code Online (Sandbox Code Playgroud)

附言。顺便说一句,我希望用更复杂(并且可能命名)的函数来做到这一点,上面的{1}例子很简短

arrays functional-programming function apl dyalog

5
推荐指数
2
解决办法
371
查看次数