arrays - GNU APL 和 Dyalog APL 中的分区行为

标签 arrays split apl dyalog gnu-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│ │
│ └~────┘ └~────┘ └~─┘ │
└∊─────────────────────┘

对于相同的声明 (5 ⍴ 1 0) ⊂ 5 5 ⍴ ⍳25在 GNU APL 中
┏→━━━━━━━━━━━━━┓
↓┏→┓  ┏→┓  ┏→┓ ┃
┃┃1┃  ┃3┃  ┃5┃ ┃
┃┗━┛  ┗━┛  ┗━┛ ┃
┃┏→┓  ┏→┓  ┏→━┓┃
┃┃6┃  ┃8┃  ┃10┃┃
┃┗━┛  ┗━┛  ┗━━┛┃
┃┏→━┓ ┏→━┓ ┏→━┓┃
┃┃11┃ ┃13┃ ┃15┃┃
┃┗━━┛ ┗━━┛ ┗━━┛┃
┃┏→━┓ ┏→━┓ ┏→━┓┃
┃┃16┃ ┃18┃ ┃20┃┃
┃┗━━┛ ┗━━┛ ┗━━┛┃
┃┏→━┓ ┏→━┓ ┏→━┓┃
┃┃21┃ ┃23┃ ┃25┃┃
┃┗━━┛ ┗━━┛ ┗━━┛┃
┗∊━━━━━━━━━━━━━┛

Dyalog APL 在 ⎕ML←3 时也会这样做

有没有办法改变 GNU APL 的行为以获得相同的行为?

最佳答案

简短的回答是 ,因为 GNU APL 遵循 IBM APL2 语言约定。

核心 APL 语言是在 1970 年代中期开发和完善的。然而,嵌套数组的出现稍晚一些,也许第一个初步的先睹为快的实现是在 1980 年左右开始的。

当时的主要参与者是 IBM、I. P. Sharp Associates、STSC 和相对较新的 Dyalog。所有嵌套数组的实现都在一个或多个细节上有所不同,可以说最大的差异是 Sharp 对盒装数组的实现,这是今天在 J.

可以说,当时大型机 IBM APL2 可能拥有最大的市场份额。

STSC 后来更名为 Manugistics,实现将演变为 APL2000 的 APL+ 产品套件。

STSC 和 Dyalog 都提供了一些围绕各种嵌套阵列亚种的兼容模式,STSC 是 )EVLEVEL 系统命令,进化级别,而 Dyalog 是 []ML,迁移级别。

简而言之,Dyalog 的 []ML 可以设置为 0、1、2 或 3。从 Dyalog 的文档中,
[]ML 0是默认的原生 Dyalog 嵌套数组实现
[]ML 1将 monadic epsilon 的定义更改为“enlist”函数,一种 super 解说
[]ML 2交换用于“第一”和“混合”功能的符号的定义,加上“深度”功能的替代定义
[]ML 3提供 IBM APL2 兼容性。

就我个人而言,我几乎只使用 []ML 3,因为当大型机还存在时,我在 APL2 中进行了大量编程。

同样,GNU APL 遵循 IBM APL2 语言兼容性。实现交替包围行为的一种方法是编写覆盖函数来模拟其他实现的特性。

关于arrays - GNU APL 和 Dyalog APL 中的分区行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27936301/

相关文章:

javascript - 将相同长度的数组组合成对象数组

php - 使用 PHP 表在行中显示列标题值

apl - 在 APL 中,单行代码是否优于更传统的变量繁重的代码?

fibonacci - 在 APL 中生成没有循环或流量控制的斐波那契数列

java - 从 1D 获取 2D 数组索引

sql - 动态转换数组元素的类型以匹配 PostgreSQL 查询中的某些表达式类型

C# - 使用 String.Split(CharArray) 时识别匹配字符

perl - 在 Perl 中从文件中分割字符串

Python 用空格分割字符串,除非 a\在前面

command-line-arguments - Dyalog APL : how to write standalone files that can be executed?