#kdb #k
#kdb #k
Вопрос:
Недавно я нашел метод применения dict к dict. Это что-то вроде этого:
(3 4 5!6 7 8)[(`a`b)!(2 3)] ~ (`a`b!0N 6)
или даже это, что выглядит более естественным для чтения слева направо:
(@[;(`a`b)!(2 3)](3 4 5!6 7 8)) ~ (`a`b!0N 6)
Могу ли я использовать это поведение (есть ли какие-либо оговорки)? Описано ли это где-нибудь в официальных документах?
Это кажется абсолютно умопомрачительной техникой: мы определенно применяем функцию (список / словарь / таблицу) к ее аргументу, а не просто передаем аргумент функции.
Ответ №1:
Я думаю, что разумно, если вы рассматриваете словарь как функцию, которая принимает ключи в качестве входных и выходных значений.
Таким же образом, функция, которая удваивает, удваивает значения вашего ввода, сохраняя ключи вашего ввода:
q)f1:2*
q)f1[`a`b!2 3]
a| 4
b| 6
«функция» (словарь), которая принимает ключи и выводит значения, будет выполнять аналогичные действия:
q)f2:3 4 5!6 7 8
q)f2[`a`b!2 3]
a|
b| 6
Комментарии:
1. Спасибо, Терри! Теперь это подходит моему разуму в приятной и понятной форме 🙂