Применение проекций и функций monadi c в k - PullRequest
1 голос
/ 13 марта 2020

Как правильно применить монади c функций и проекций в k?

KDB+ 3.6 2018.05.17 Copyright (C) 1993-2018 Kx Systems
q) \
  (5*;10*)@\:2
10 20
  ({x};{x*x})@\:2
2 4
  (#;#)@\:2
(#[2];#[2])

Почему 2 первых примера работают правильно, а последний - нет? Я думал, что это будет:

  (#;#)@\:2
1 1

, но это дает мне странный результат.

Ответы [ 3 ]

1 голос
/ 13 марта 2020

В целях полноты это относится к унарным формам, которые описаны здесь: https://code.kx.com/q/basics/exposed-infrastructure/#unary -формы

1 голос
/ 14 марта 2020

# ( take ) - это функция diadi c, в отличие от count, который равен monadi c. Вот почему вы получали проекцию, применяя к ней только один аргумент.

q)count
#:
q)type (count)
101h
q)type (#)
102h

Вы можете использовать. Оператор ( dot-apply ) в diadi c работает с двумя операндами, возвращая результат, который не является проекцией.

(#;#) .\: (3;til 10)
0 1 2
0 1 2
1 голос
/ 13 марта 2020

Понял!

q)\
  (#;#)@\:2
(#[2];#[2])
  (#:;#:)@\:2
1 1
...