KDB+ q中函数列表形式调用的返回值逻辑疑问
Kdb+列表函数调用的逻辑解析
你观察到的运行结果对应的逻辑是:
- 当第一个参数
x等于1时,返回neg 第二个参数(即-y) - 当第一个参数
x大于1时,返回第二个参数本身(等价于neg neg y)
但这个逻辑和你定义的f:{x*x}函数没有直接关联,且不符合标准Kdb+中列表函数的调用规则。
标准Kdb+的列表函数调用规则
在标准Kdb+中,(f; g)[x; y]的执行步骤是:
- 以第一个参数
x作为索引,从列表(f; g)中取出对应位置的函数(Kdb+列表为1-based索引):- 若
x=1,取出第一个函数f,调用f[y],结果应为y*y(比如(f;neg)[1;2]应返回4) - 若
x=2,取出第二个函数neg,调用neg[y],结果应为-y(比如(f;neg)[2;3]应返回-3)
- 若
- 若索引
x超出列表长度(比如x=4,列表仅含2个元素),会直接抛出'index索引错误。
你看到的结果对应的可能逻辑
如果要实现你观察到的输出,实际对应的是一个条件判断逻辑,而非列表函数调用:
// 等价逻辑的显式写法 customFunc:{[x;y] $[x=1; neg y; y]} q)customFunc[1;2] -2 q)customFunc[1;3] -3 q)customFunc[2;3] 3 q)customFunc[4;3] 3
这种情况可能是你在输入代码时出现了笔误,或者运行环境存在特殊配置导致解析行为偏离标准Kdb+。
内容的提问来源于stack exchange,提问作者Patryk Maryn
相关产品推荐
相关产品推荐

