无法将多个参数传递给kdb中的每个函数

时间:2018-04-03 03:30:24

标签: kdb

我如何将2个变量传递给lambda函数,其中x是数字,y是符号。 我写过这个,但它不会处理

{[x;y]
    // some calculation with x and y
}
each ((til 5) ,\:/: `a`b`c`d`f)

似乎在抱怨我错过了另一个arg。

2 个答案:

答案 0 :(得分:3)

以下是我认为您正在寻找的一个例子:

q){string[x],string y}./: raze (til 5) ,\:/: `a`b`c`d`f

您的示例的问题是,您需要调整((til 5) ,\:/: `a`b`c`d`f)的输出以获取2个输入的列表。

使用“。”将变量列表传递给函数。 (点应用)http://code.kx.com/q/ref/unclassified/#apply .e.g

q){x+y} . 10 2
12

在我的例子中,我然后使用“每个权利”然后应用于每一对。 http://code.kx.com/q/ref/adverbs/#each-right

或者,如果您将函数包装在另一个lamda

中,则可以使用每个
q){{string[x],string y} . x} each raze (til 5) ,\:/: `a`b`c`d`f

答案 1 :(得分:2)

而不是使用交叉或",/:\:"生成参数列表。并将的每个传递到你的函数中,每个左边都修改你的函数(" /:\:")给你所有的组合。他应该采用这种格式;

x f/:\: y

其中x和y都是列表。重用示例{string [x],string y};

til[5] {string[x], string y}/:\:`a`b`c`d

这将为您提供x和y的所有组合的矩阵。如果您想要展平该列表,请添加' raze'