在Dyalog中有⎕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的行为以获得相同的行为?
发布于 2015-01-14 11:04:00
简单的回答是no,因为GNU遵循IBM语言约定。
核心的APL语言是在20世纪70年代中期发展和完善的。然而,嵌套数组开始出现的时间稍晚,也许第一个初步的窥视实现出现在1980年左右。
当时的主要参与者是IBM、I.P.SharpAssociates、STSC和Dyalog,这是一个相对较新的公司。所有嵌套数组实现在一个或另一个细节上是不同的,可以说最大的区别是夏普实现的装箱数组,这是今天在J.
可以说,在当时,大型机IBM APL2可能拥有最大的市场份额。
STSC随后将更名为宏利,其实施将演变为APL+ 2000的APL+产品套件。
STSC和Dyalog为各种嵌套阵列亚种提供了一些兼容模式,STSC是)EVLEVEL系统命令、演化级和Dyalog的是[]ML的迁移级。
简而言之,Dyalog的[]ML可以设置为0、1、2或3。
[]ML 0是默认的本机Dyalog嵌套数组实现。
[]ML 1将一元epsilon的定义改为“登记”函数,这是一种超级ravel函数。
[]ML 2交换了用于“第一”和“混合”函数的符号的定义,并给出了“深度”函数的替代定义。
[]ML 3提供APL2兼容性。
就我个人而言,我几乎完全使用[]ML 3,因为我在大型机还在的时候用APL2进行了大量编程。
同样,GNU遵循APL2语言兼容性。实现交替封装行为的一种方法是编写掩护函数,以模拟其他实现的特性。
https://stackoverflow.com/questions/27936301
复制相似问题