q - while循环中的内部状态

时间:2018-01-15 12:39:03

标签: kdb q-lang

在q中,我试图在递增参数 <input onblur="callYourFunction()" id="form1_name" name="name" class="s_input" required="required" type="text"> 上调用函数f,而不满足某些条件。

函数id创建一个随机长度(1到5之间)的表,其中列f取决于输入identifier

id

f:{[id] len:(1?1 2 3 4 5)0; ([] identifier:id+til len; c2:len?`a`b`c)} 开始,id=0应在f时调用,即长时间生成长度为1的表格。每一步都应增加(count f[id])>1

使用“重复”副词我可以执行while条件和起始值:

id

但是如何继续增加{(count x)>1} f/0

1 个答案:

答案 0 :(得分:1)

不完全确定这是否能解决您的问题,但我能够通过在函数内部递增id并在每次迭代时返回它来使其工作:

q)g:{[id] len:(1?1 2 3 4 5)0; id[0]:([] identifier:id[1]+til len; c2:len?`a`b`c);@[id;1;1+]}

在这种情况下,id是一个2元素列表,其中第一个元素是您要返回的表(最初为()),第二个项目是id。通过修改退出条件,我可以在输出表的计数为1时停止:

q)g/[{not 1=count x 0};(();0)]
+`identifier`c2!(,9;,`b)
10

如果您只需要该表,则可以在上述表达式的输出上运行first

q)first g/[{not 1=count x 0};(();0)]
identifier c2
-------------
3          a

函数f的问题在于,当使用over并扫描输出时,如果每次迭代成为下一次迭代的输入。在你的情况下,你的函数正在处理第二遍传递给表的数值。