Применение словаря к словарю

#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. Спасибо, Терри! Теперь это подходит моему разуму в приятной и понятной форме 🙂