Kdb 迭代(/)多价函数

Kdb 迭代(/)多价函数,kdb,Kdb,如何迭代多价秩(>1)的函数,例如f:{[x;y]…}下一迭代步骤中的函数输入取决于上一迭代步骤?仅迭代一元函数中的示例 通过将参数字典(状态)传递到一元函数中,我可以间接地(详细地)实现这一点: f:{[arg] key[arg]!(min arg;arg[`y]-2)} f/[{0<x`x};`x`y!6 3] f:{[arg]键[arg]!(最小arg;arg[`y]

如何迭代多价秩(>1)的函数,例如
f:{[x;y]…}
下一迭代步骤中的函数输入取决于上一迭代步骤?仅迭代一元函数中的示例

通过将参数字典(状态)传递到一元函数中,我可以间接地(详细地)实现这一点:

f:{[arg] key[arg]!(min arg;arg[`y]-2)}                                                          
f/[{0<x`x};`x`y!6 3]
f:{[arg]键[arg]!(最小arg;arg[`y]-2)}

与“/”和“\”一起使用的f/[{0函数只能将上一次迭代的结果作为单个项接受,这意味着只为结果保留1个函数参数。从这个意义上讲,它是一元函数

对于多个输入参数依赖于上一次迭代结果的函数,一种解决方案是将该函数包装在一元函数中,并使用apply运算符在上一次迭代结果上执行该函数

例:

q)g:{(minx,y;y-2)}/秩为2的函数
q) f:{x.y}[g;]/g函数包装在一元函数中进行迭代

q) f/[{0关于Rahul的答案,您可以使用以下方法之一(稍微不太详细)来获得相同的结果:

q)g:{(min x,y;y-2)}
q)(g .)/[{0<x 0};6 3]
-1 -3
q).[g]/[{0<x 0};6 3]
-1 -3
q)g:{(minx,y;y-2)}

q) (g.)随着时间的推移,我偶然发现了甚至更短的方法,它不需要括号或括号:

q)g:{(min x,y;y-2)}
q){0<x 0} g//6 3
-1 -3
q)g:{[x;y] x: min x,y; y:y-2; $[x<0; (x;y); .z.s[x;y]]}
q)g[6;3]
-1 -3
q)g:{(min x,y;y-2)}
q){0<x 0} g//6 3
-1 -3
q)(*) . 2 3
6
q)(*/) 2 3
6