применить несколько векторов к функции - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть простая функция, которая возвращает таблицу:

F[("A";"B");(1,-1)]

Я хотел бы применить эту функцию, передавая векторы в качестве входных данных:

a:((`A;`B);(`B;`C);(`C;`D))
b:((1;-1);(1;-1);(1;-1))

Я пробовал:

F each a,b
F each a cross b

, но это не работает или объединяет векторы, а не разделяет 2 компонента. Кроме того, когда я заставлю его работать, как связать строку в результирующем списке таблиц? Я иду из питона.

1 Ответ

0 голосов
/ 16 сентября 2018

Вам нужно использовать ' каждый-оба:

q)F:{ ([] enlist x; enlist y)}    /if F is simply creating a table 

q)F[("A";"B");(1,-1)]
x    y
---------
"AB" 1 -1

q)a:((`A;`B);(`B;`C);(`C;`D))
q)b:((1;-1);(1;-1);(1;-1))

q)F'[a;b]   /each-both
+`x`y!(,`A`B;,1 -1)
+`x`y!(,`B`C;,1 -1)
+`x`y!(,`C`D;,1 -1)

raze отформатирует его в таблицу (я думаю, что связывание строк означает добавление таблиц вместе)

q)raze F'[a;b]
x   y
--------
A B 1 -1
B C 1 -1
C D 1 -1
...