在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个参数会产生影响?
我认为这里需要解释一些事情,但不是每个人和每个人之间的区别.
你的第一个和第二个例子并不完全可比.使用多个参数,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