【问题标题】:Semantics of x,¨y in APL: ie, what does it mean to map a catenate in APL?APL 中 x,¨y 的语义:即,在 APL 中映射一个连接是什么意思?
【发布时间】:2020-03-06 13:23:10
【问题描述】:

考虑表达式(1 2 3),¨(4 5 6)。我希望这会“将(1 2 3), 的操作映射到456 上,答案如下:

(1 2 3),¨(4 5 6)
= (1 2 3),¨((4) (5) (6)) [Using (x) = x]
= (((1 2 3), 4) ((1 2 3), 5) ((1 2 3), 6)) [Using definition of map]
= ((1 2 3 4) (1 2 3 5) (1 2 3 6))

但是,这不是答案!在 Dyalog APL 中评估的答案是:

     ]display (1 2 3),¨(4 5 6) 
┌→──────────────────┐
│ ┌→──┐ ┌→──┐ ┌→──┐ │
│ │1 4│ │2 5│ │3 6│ │
│ └~──┘ └~──┘ └~──┘ │
└∊──────────────────┘

怎么样?这个答案背后的原因是什么?我的等式推理哪里出错了?我应该注意的, (comma)¨(map) 的错误心理模型是否还有更多“陷阱”?

【问题讨论】:

    标签: arrays map-function apl dyalog


    【解决方案1】:

    , 是一个对称函数,它只是连接它的参数。

    ¨ 也是对称的,它将左右元素配对。

    根据 APL 的 scalar extension 规则,作为参数的单个元素被分配以与来自另一个参数的所有元素配对。

    你说的是(1 2 3),操作,但是没有这样的操作。如果你试图给这个“函数”起个名字,它会以SYNTAX ERROR 失败。

    但是,您可以创建一个函数,该函数接受其参数并将其附加到1 2 3 作为Richard Park demonstrated1 2 3∘, 然后您可以使用 1 2 3∘,¨ 将该函数映射到数组的元素上。

    【讨论】:

    • 啊,(1, 2, 3), 不是函数的洞察力,而是 , 的洞察力是我所缺少的洞察力。我在考虑 Haskell 风格的柯里化,只有在 存在时才会出现。很有启发性,谢谢!
    【解决方案2】:
    1 2 3,¨4 5 6 
    

    1 2 3 的每个元素与4 5 6 的每个元素连接起来

    1 2 3∘,¨4 5 6
    

    4 5 6的每个元素连接1 2 3

          (2 2⍴⍳4),¨(2 2⍴⎕A)
    ┌───┬───┐
    │1 A│2 B│
    ├───┼───┤
    │3 C│4 D│
    └───┴───┘
          (2 2⍴⍳4)∘,¨(2 2⍴⎕A)
    ┌─────┬─────┐
    │1 2 A│1 2 B│
    │3 4 A│3 4 B│
    ├─────┼─────┤
    │1 2 C│1 2 D│
    │3 4 C│3 4 D│
    └─────┴─────┘
    

    【讨论】:

    • 所以为了清楚起见,¨ 在使用时表现得像 zipWith?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多