Q语言循环
Looping in Q language
我正在努力弄清楚 Q 语言的基础知识。我正在尝试一个示例程序,假设对于给定的数字,我可以找到 3 和 5 的所有倍数的总和?
如果输入是 10 总和:23
我正在尝试使用 til 和 sum 来思考,但直到现在都无济于事。
q)sum where (or/) 0=(til 10) mod/: 3 5
23
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)
如果索引和这些索引处的值不相等,那么我们需要对原始列表进行索引并对值求和。
我正在努力弄清楚 Q 语言的基础知识。我正在尝试一个示例程序,假设对于给定的数字,我可以找到 3 和 5 的所有倍数的总和?
如果输入是 10 总和:23
我正在尝试使用 til 和 sum 来思考,但直到现在都无济于事。
q)sum where (or/) 0=(til 10) mod/: 3 5
23
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)
如果索引和这些索引处的值不相等,那么我们需要对原始列表进行索引并对值求和。