请注意,我正在使用Dyalog APL。
假设:
S←'string'
S
string
⍴S
6
⍴⍴S
1
DISPLAY S
┌→─────┐
│string│
└──────┘
如果我使用连接执行缩减,我会得到一个标量:
S_←,/S
S_
string
⍴S_
⍴⍴S_
0
DISPLAY S_
┌──────────┐
│ ┌→─────┐ │
│ │string│ │
│ └──────┘ │
└∊─────────┘
当然,我无法再访问“数组”的元素。我想知道为什么会出现这种情况?我相信/
的行为与foldr
相似,而,
产生了一个向量,那么为什么我最终会得到一个标量结果?
提前感谢您的帮助。
答案 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个已嵌套的元素(参见上面的定义)。