KDB Q负数和MOD

时间:2019-08-13 14:16:58

标签: kdb

有关Kdb中负数和mod的基本问题

以下给出的预期值为-1

q)否定7 mod 2

但是

q)a:neg 7

q)一个mod 2

给出1

及以下

q)-7 mod 2

给出1

有人请解释一下吗?

3 个答案:

答案 0 :(得分:3)

KDB从右到左执行语句。因此,语句neg 7 mod 2neg(7 mod 2)相同。

首先KDB执行7 mod 2,然后对以下结果应用neg函数。

q) 7 mod 2 // 1
q) neg 1 // -1

相同
q) neg 7 mod 2 // -1 

最后2种情况-7 mod 2neg[7] mod 2是等效的。结果是1。

答案 1 :(得分:2)

如kx参考页(https://code.kx.com/v2/ref/mod/)所示,mod函数仅返回正值。因此,您的示例中-7 mod 2a mod 2的期望答案是1。

neg 7 mod 2返回-1的原因是q从右到左评估算术。

7 mod 2返回1时,neg函数从-1取值后返回7 mod 2

希望这会有所帮助!

答案 2 :(得分:1)

正如Rahul所介绍的那样,这是由于s1 != s2执行KDB以及right to left将始终在kdb中返回肯定结果这一事实而引起的预期行为。如果您想更好地了解给定命令的执行方式,可以随时将其解析出来,这将显示底层的mod解析树。

k

在这里我们可以看到负数(q)mod k){x-y*x div y} q)neg -: q)parse "neg 7 mod 2" -: (k){x-y*x div y};7;2) )应用于7和2的mod(-:)的结果。

从右到左跳动了许多学习kdb的人。在学习基础知识时,牢记这方面可能是导致您遇到kdb 任何问题的可能原因,我可以保证它至少会使您崩溃几次。

我真的建议您阅读/阅读《 Kx免费提供的Q For Mortals 3》。