在KDB中,我为什么要这样做:
{[x;y]x+y} ./: enlist[(1;1);(2;1)]
但不是这样:
{[x]x+1} ./: enlist[1;2]
如果我使用它:
{[x]x+1} each enlist[1;2]
然后它有效。为什么选择2个参数会产生影响呢?
答案 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