Семантика x, ¨y в APL: ie, что значит отображать cateate в APL? - PullRequest
1 голос
/ 06 марта 2020

Рассмотрим выражение (1 2 3),¨(4 5 6). Я ожидал, что это "отобразит операцию (1 2 3), на каждом из 4, 5 и 6, давая ответ в виде:

(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│ │
│ └~──┘ └~──┘ └~──┘ │
└∊──────────────────┘

Как? В чем причина этого ответа? Где я go ошибся в своих оценках? Есть ли еще «ошибки» что моя неправильная ментальная модель , (comma) и ¨(map), о которой я должен знать?

Ответы [ 2 ]

1 голос
/ 06 марта 2020

, - это симметричная c функция, она просто объединяет свои аргументы.

¨ также является симметричной c, она объединяет элементы слева и справа.

Согласно правилам скалярного расширения APL , один элемент в качестве аргумента распределяется для сопряжения со всеми элементами из другого аргумента.

Вы говорите о операции (1 2 3), но такой операции нет. Если вы попытаетесь дать этой «функции» имя, она потерпит неудачу с SYNTAX ERROR.

Однако вы можете создать функцию, которая принимает аргумент и добавляет ее к 1 2 3 как Ричард Парк продемонстрировал ; 1 2 3∘, и затем вы можете сопоставить эту функцию с элементами массива с помощью 1 2 3∘,¨.

1 голос
/ 06 марта 2020
1 2 3,¨4 5 6 

Cateate каждого элемента 1 2 3 с каждым элементом 4 5 6

1 2 3∘,¨4 5 6

Cateate 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│
└─────┴─────┘
...