如何在 KDB 中设置累加器的初始值?

How do I set the initial value of an accumulator in KDB?

我写了一个函数 r 表示功能状态 s 更新,形式为 s: r[s;q]

我试图让它扫描整数列表 q,但我遇到的问题是扫描 / 的应用程序消耗了列表,而不是初始状态 s。结果应该是状态列表。

我做错了什么?

实际代码:

a: 5+cos (til 20)
s: `peg`ent`exi!3#enlist[::]
r: {[s;q]
  l: 0.9; h: 1.1;
  init: `peg`ent`exi!({null x};{null x}; {null x});
  s1: `peg`ent`exi!({not null x};{null x}; {null x});
  s2: `peg`ent`exi!({not null x};{not null x}; {null x});

  s: $[all init@'s; s, enlist[`peg]!enlist[q];s];
  s: $[(all s1@'s) & q<l*s[`peg]; s, enlist[`ent]!enlist[q];s];
  s: $[(all s2@'s) & q>h*s[`peg]; s, enlist[`exi]!enlist[q];s];
  s
  }

r scan a

答案是将列表的第一个值设置为状态:

r scan enlist[s], a