APL 中 x,¨y 的语义:即,映射 APL 中的链是什么意思?

Semantics of x,¨y in APL: ie, what does it mean to map a catenate in APL?

考虑表达式 (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│ │
│ └~──┘ └~──┘ └~──┘ │
└∊──────────────────┘

怎么样?这个答案背后的原因是什么?我的等式推理哪里出错了?还有更多 "gotchas" 我应该注意的 , (comma)¨(map) 不正确的心理模型吗?

1 2 3,¨4 5 6 

1 2 3 的每个元素与 4 5 6

的每个元素连接起来
1 2 3∘,¨4 5 6

1 2 34 5 6

的每个元素连接起来
      (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│
└─────┴─────┘

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

¨也是对称的,它从左到右对元素进行配对。

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

你说的是操作(1 2 3),但是没有这样的操作。如果你试图给这个 "function" 一个名字,它将失败并显示 SYNTAX ERROR.

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