Q Language - 动词和副词
Kdb+ 有名词、动词和副词。 所有数据对象和函数都是名词。 动词通过减少表达式中方括号和括号的数量来增强可读性。 副词修改二元(2个参数)函数和动词以产生新的相关动词。 副词产生的功能称为派生功能或派生动词。
Each
副词 each,用 ( ` ) 表示,修饰二元函数和动词以应用于列表项而不是列表本身。 看看下面的例子−
q)1, (2 3 5) / Join 1 2 3 5 q)1, '( 2 3 4) / Join each 1 2 1 3 1 4
单子函数有一种使用关键字"each"的 Each 形式。 例如,
q)reverse ( 1 2 3; "abc") /Reverse a b c 1 2 3 q)each [reverse] (1 2 3; "abc") /Reverse-Each 3 2 1 c b a q)'[reverse] ( 1 2 3; "abc") 3 2 1 c b a
Each-Left 和 Each-Right
二元函数的 Each 有两种变体,称为 Each-Left (\:) 和 Each-Right (/:)。 以下示例解释了如何使用它们。
q)x: 9 18 27 36 q)y:10 20 30 40 q)x,y / join 9 18 27 36 10 20 30 40 q)x,'y / each 9 10 18 20 27 30 36 40 q)x: 9 18 27 36 q)y:10 20 30 40 q)x,y / join 9 18 27 36 10 20 30 40 q)x,'y / each, will return a list of pairs 9 10 18 20 27 30 36 40 q)x, \:y / each left, returns a list of each element / from x with all of y 9 10 20 30 40 18 10 20 30 40 27 10 20 30 40 36 10 20 30 40 q)x,/:y / each right, returns a list of all the x with / each element of y 9 18 27 36 10 9 18 27 36 20 9 18 27 36 30 9 18 27 36 40 q)1 _x / drop the first element 18 27 36 q)-2_y / drop the last two element 10 20 q) / Combine each left and each right to be a / cross-product (cartesian product) q)x,/:\:y 9 10 9 20 9 30 9 40 18 10 18 20 18 30 18 40 27 10 27 20 27 30 27 40 36 10 36 20 36 30 36 40