GNU APL和Dyalog APL中的分区行为

时间:2015-01-14 05:20:19

标签: 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│ │
│ └~────┘ └~────┘ └~─┘ │
└∊─────────────────────┘

对于GNU APL中的相同语句(5 ⍴ 1 0) ⊂ 5 5 ⍴ ⍳25

┏→━━━━━━━━━━━━━┓
↓┏→┓  ┏→┓  ┏→┓ ┃
┃┃1┃  ┃3┃  ┃5┃ ┃
┃┗━┛  ┗━┛  ┗━┛ ┃
┃┏→┓  ┏→┓  ┏→━┓┃
┃┃6┃  ┃8┃  ┃10┃┃
┃┗━┛  ┗━┛  ┗━━┛┃
┃┏→━┓ ┏→━┓ ┏→━┓┃
┃┃11┃ ┃13┃ ┃15┃┃
┃┗━━┛ ┗━━┛ ┗━━┛┃
┃┏→━┓ ┏→━┓ ┏→━┓┃
┃┃16┃ ┃18┃ ┃20┃┃
┃┗━━┛ ┗━━┛ ┗━━┛┃
┃┏→━┓ ┏→━┓ ┏→━┓┃
┃┃21┃ ┃23┃ ┃25┃┃
┃┗━━┛ ┗━━┛ ┗━━┛┃
┗∊━━━━━━━━━━━━━┛

Dyalog APL也会在⎕ML←3

时执行此操作

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

1 个答案:

答案 0 :(得分:5)

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

核心APL语言是在20世纪70年代中期开发和完善的。然而,嵌套阵列开始出现的时间稍晚,也许是从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”函数,一种超级ravel

[]ML 2交换用于“第一”和“混合”函数的符号的定义,并提供“深度”函数的替代定义

[]ML 3提供IBM APL2兼容性。

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

同样,GNU APL遵循IBM APL2语言兼容性。实现备用封闭行为的一种方法是编写封面函数来模拟其他实现的特性。