首页 > 解决方案 > 迭代 (/) 多价函数

问题描述

你如何迭代一个多价秩(> 1)的函数,例如f:{[x;y] ...}下一个迭代步骤中的函数输入取决于最后一个迭代步骤?参考手册中的示例仅迭代一元函数。

通过将参数字典(状态)传递给一元函数,我能够间接(并且冗长地)实现这一点:

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

请注意,例如投影f[x;]/[whilecond;y]x在下一个迭代步骤中的依赖于上一次迭代的结果(即当 x 与路径无关时)的情况下才有效。

标签: kdb

解决方案


关于 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

或者,您可以使用 .zs self 函数,该函数递归调用函数 g 并将最后一次迭代的输出作为其参数。例如,

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

推荐阅读