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

del*_*ita 3 kdb

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

{[x;y]x+y} ./: enlist[(1;1);(2;1)]
Run Code Online (Sandbox Code Playgroud)

但不是这个:

{[x]x+1} ./: enlist[1;2]
Run Code Online (Sandbox Code Playgroud)

如果我使用这个:

{[x]x+1} each enlist[1;2]
Run Code Online (Sandbox Code Playgroud)

然后它工作.为什么采取2个参数会产生影响?

Dón*_*nch 6

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

你的第一个和第二个例子并不完全可比.使用多个参数,enlist返回单个列表,以便enlist[(1;1);(2;1)]返回一般列表,同时enlist[1;2]返回一个类型列表(long列表).更多关于enlist 这里.

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

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

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

这次我们看到等级错误,.试图将2个参数应用于monadic函数.相若方式;

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

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

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