Как заменить нули в списке kdb + в 5 символах кода? - PullRequest
0 голосов
/ 02 августа 2020

У меня есть следующий список:

q) v:1 6 0 7 -2 0f

Я мог бы заменить 0 в этом списке на 1 с помощью условного вектора:

q) ?[v=0;1;v]

Однако есть ли способ выполнить ту же операцию всего с 5 символами? Т.е.

q)?[v=0;1;v]~xxxxx
1b

РЕДАКТИРОВАТЬ: Я получил этот вопрос как головоломку. Я предполагаю, что это произошло из-за идеи, что q - это все, чтобы получить желаемый результат с минимальным количеством кода. Так что это не служит какой-то конкретной цели, просто для развлечения

Ответы [ 2 ]

4 голосов
/ 02 августа 2020

Вы можете сделать это, используя следующий синтаксис:

v+0=v
0 голосов
/ 03 августа 2020

Это загадка ?? В некоторых очень специфичных c (надуманных) примерах они также могут работать, предполагая, что не являются поплавками:

q)v:1 1 0 7 -2 0 8
q)v^v v
1 1 1 7 -2 1 8
q)v|v v
1 1 1 7 -2 1 8

Но опять же, это очень сфабрикованные примеры, которые вообще не могут использоваться в общем случае согласно решению Avons.

БОНУСНОЕ РЕДАКТИРОВАНИЕ: k может выполнять общий регистр в 4 символа

q)v:1 6 0 7 -2 0f
q)\
  v+~v
1 6 1 7 -2 1f
...