1

考虑表达式(1 2 3),¨(4 5 6)。我希望这能够“将操作映射到、 和(1 2 3),中的每一个上4,给出的答案如下:56

(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)我应该注意的“陷阱”?

4

2 回答 2

1
1 2 3,¨4 5 6 

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

1 2 3∘,¨4 5 6

1 2 3与每个元素连接4 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│
└─────┴─────┘
于 2020-03-06T13:40:17.413 回答
1

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

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

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

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

但是,您可以创建一个函数,该函数接受其参数并将其附加到1 2 3Richard Park 演示的内容中;1 2 3∘,然后您可以将该函数映射到具有1 2 3∘,¨.

于 2020-03-06T14:25:07.490 回答