循环使用Q语言

时间:2016-07-24 15:12:20

标签: kdb

我想弄清楚Q语言的基础知识。我正在尝试一个示例程序,让我们说一个给定的数字,我可以找到3和5的所有倍数的总和?

如果输入是10和:23

我试图用直接和总和的方式思考,但是到现在为止还是无济于事。

2 个答案:

答案 0 :(得分:2)

q)sum where (or/) 0=(til 10) mod/: 3 5
23

答案 1 :(得分:0)

q)sum where 0=min(til 10)mod/:3 5
23

在步骤中,我们只需将我们的mod应用于5和3而不是单独执行。

q)(til 10)mod 3
0 1 2 0 1 2 0 1 2 0
q)(til 10)mod 5
0 1 2 3 4 0 1 2 3 4
q)(til 10)mod/:3 5
0 1 2 0 1 2 0 1 2 0
0 1 2 3 4 0 1 2 3 4
q)

通过这个结果,我们有2个列表; ((直到10)mod 3;(直到10)mod 5)。如果我们去了每个的索引3,我们将得到(0; 3)。这意味着我们的数字可以被3整除但不能被5整除。我们只关心它是否可以被它整除,所以我们可以采用最小值。

q)min(til 10)mod/:3 5
0 1 2 0 1 0 0 1 2 0
q)

接下来,我们只需找到mod为零的索引;

q)where 0=min(til 10)mod/:3 5
0 3 5 6 9
q)

由于这些指数与这些指数的实际值具有相同的值,我们可以将它们相加。给;

q)sum where 0=min(til 10)mod/:3 5
23
q)

如果那些指数的指数和价值不相等,那么我们需要索引到原始列表并对这些值求和。