Учитывая таблицу t: ([] a: 1 2 3 4)
, как можно получить столбец b
, например,
n=2
a b
-----
1 1 2
2 2 3
3 3 4
4 ,4
n=3
a b
-------
1 1 2 3
2 2 3 4
3 3 4
4 ,4
где n
— количество последующих элементов a
(включая a
), которые должны быть включены в b
.
Я придумал кое-что, что работает,
t: ([] a: 1 2 3 4)
n: 3;
f:{[a;n]
{((count x) & n)#x} each -1_(enlist ,/[a]),({[a;x] a except x }[a] each ,\[a])
};
show t: update b:f[a;n] from t;
который выводит
a b
-------
1 1 2 3
2 2 3 4
3 3 4
4 ,4
как и ожидалось, но меня беспокоит, что это не самый эффективный и не самый интуитивный подход, особенно для больших таблиц.
Используйте next
и scan
. Левый аргумент — это количество последующих элементов, которые вы хотите:
q)update b:flip 1 next\a from t
a b
----
1 1 2
2 2 3
3 3 4
4 4
q)update b:flip 2 next\a from t
a b
------
1 1 2 3
2 2 3 4
3 3 4
4 4