Учитывая двоичную функцию f, которая принимает в качестве аргументов:
x: таблица с ключамиy: значение ключа, которое указывает на строку, которая будет создана
. При условии, что операции обновления должны выполняться последовательно (а не массовая операция), и как только этот ключ будет заполнен, мы будем игнорировать дальнейшие обновления для него:
q)tbl:([col1:()];col2:())
q)kv:10?`a`b`c`d
q)f:{[x;y]if[y in key[x];:x];x upsert (y;1?10)}
q)(f/)[enlist[tbl],kv]
col1| col2
----| ----
a | 9
b | 2
c | 1
d | 8
Есть ли более правильный способ построения вызова?Смешивание двух входов в один список ввода выглядит как хакерство и вызывает вопросы о том, как разместить функции, которые принимают более 2 аргументов.