为什么减少连接会给APL带来标量?

时间:2014-07-03 13:38:13

标签: arrays scalar apl

请注意,我正在使用Dyalog APL。

假设:

      S←'string'
      S
string
      ⍴S
6
      ⍴⍴S
1
      DISPLAY S
┌→─────┐
│string│
└──────┘

如果我使用连接执行缩减,我会得到一个标量:

      S_←,/S
      S_
 string 
      ⍴S_

      ⍴⍴S_
0
      DISPLAY S_
┌──────────┐
│ ┌→─────┐ │
│ │string│ │
│ └──────┘ │
└∊─────────┘

当然,我无法再访问“数组”的元素。我想知道为什么会出现这种情况?我相信/的行为与foldr相似,而,产生了一个向量,那么为什么我最终会得到一个标量结果?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我猜你发现你可以使用⊃S_来获取你的矢量 - 它已被嵌套。

如果你看看Dyalog帮助中减少的文档,它会写道:

R is an array formed by applying function f between items of the vectors 
along the Kth (or implied) axis of Y.

For a typical vector Y, the result is:

⊂(1⊃y)f(2⊃y)f......f(n⊃y)

注意开头的⊂(附上)!结果是嵌套的 - 这可能有点令人困惑,因为您没有使用+/。 但是,当您查看+/⍳5时,会演变为⊂1+2+3+4+5,返回标量15 - 嵌套标量不会影响其深度。 它与','不同,因为该操作返回一个具有不同'大小调整策略'的对象:连接两个标量会创建一个包含两个元素的向量。因此,正如所承诺的那样,S_是一个字符串向量,其中包含6个已嵌套的元素(参见上面的定义)。