1

请注意,我将 Dyalog APL 用于以下用途。

鉴于:

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

如果我通过连接执行归约,我会得到一个标量:

      S_←,/S
      S_
 string 
      ⍴S_

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

自然,我不能再访问我的“数组”的元素。我想知道为什么会发生这种行为?我曾经相信它的/行为就像foldr,产生了一个向量,那么为什么我最终会得到一个标量结果呢?

提前感谢您的帮助。

4

1 回答 1

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 - 嵌套标量不会影响其深度。它与 ' ,' 不同,因为该操作返回一个具有不同 'sizing-policy' 的对象:连接两个标量会创建一个具有两个元素的向量。因此,正如所承诺的,您S_是一个嵌套了 6 个元素的字符串向量(参见上面的定义)。

于 2014-07-03T21:16:10.133 回答