每项权利与每项权利之间的差异

Difference between each right and each

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

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

但不是这个:

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

如果我使用这个:

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

然后就可以了。为什么采用 2 个参数会有不同?

我认为这里有几件事需要解释,但不是 each 和 each-right 之间的区别。

你的第一个和第二个例子不完全具有可比性。对于多个参数,enlist returns 是一个列表,因此 enlist[(1;1);(2;1)] returns 是一个通用列表,而 enlist[1;2] returns 是一个类型列表(多头列表) .更多关于 enlist here.

现在,动词点的应用之一是-变体应用,阅读here。这意味着它将多个参数应用于一个函数,因此 . 需要一个列表。 Each-right 依次获取右侧的每个项目并将其传递给左侧的函数。由于 . 需要一个列表,但第二行中的每个项目都是原子长度,因此会引发类型错误。

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

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

这一次我们看到排名错误,因为 . 试图将 2 个参数应用于单子函数。同样;

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

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

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