每个权利和每个人之间的差异

时间:2018-05-08 05:12:31

标签: kdb

在KDB中,我为什么要这样做:

{[x;y]x+y} ./: enlist[(1;1);(2;1)]

但不是这样:

{[x]x+1} ./: enlist[1;2]

如果我使用它:

{[x]x+1} each enlist[1;2]

然后它有效。为什么选择2个参数会产生影响呢?

1 个答案:

答案 0 :(得分:6)

我认为这里需要解释一些事情,但不是每个人之间的区别。

你的第一个和第二个例子并不完全可比。使用多个参数,enlist返回单个列表,以便enlist[(1;1);(2;1)]返回常规列表,而enlist[1;2]返回类型列表(long列表)。有关enlist here的更多信息。

现在,动词点的一个应用程序是 multi - 变量应用程序,读取here。这意味着它将多个参数应用于函数,因此.需要一个列表。每个右侧依次取右侧的每个项目并将其传递给左侧的功能。由于.期待一个列表,但是第二行中的每个项都是一个原子序列长,它会抛出一个类型错误。

更新第二行,以便.收到第一行中的列表...

q){[x]x+1} ./: enlist[(1;2)] 'rank

这次我们看到排名错误,因为.尝试将2个参数应用于monadic函数。相若方式;

q){[x]x+1}[1;2] 'rank

要解决这个问题,我们可以进一步加入。因此,每个权利将2个项目列表传递给.而不是1,2个项目列表。

q){[x]x+1} ./: enlist each (1;2) 2 3