【问题标题】:Why does reducing with concatination give a scalar in APL?为什么通过连接减少在 APL 中给出一个标量?
【发布时间】:2014-08-24 16:01:21
【问题描述】:

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

给定:

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

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

      S_←,/S
      S_
 string 
      ⍴S_

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: arrays scalar apl


    【解决方案1】:

    我猜你发现你可以使用⊃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 个嵌套元素的字符串向量(参见上面的定义)。

    【讨论】:

    • "你可以用1⊃S_得到你的向量"你的意思是⊃S_
    • 谢谢 :) 请注意 1⊃,S_ 依赖于 ⎕io
    • 是的。 {disclose}S(抱歉,iphone 还没有 APL)是 []ML-依赖! ;-)
    • 不适用于单元素向量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2013-02-04
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多