有关Kdb中负数和mod的基本问题
以下给出的预期值为-1
q)否定7 mod 2
但是
q)a:neg 7
q)一个mod 2
给出1
及以下
q)-7 mod 2
给出1
有人请解释一下吗?
答案 0 :(得分:3)
KDB从右到左执行语句。因此,语句neg 7 mod 2
与neg(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 2
和neg[7] mod 2
是等效的。结果是1。
答案 1 :(得分:2)
如kx参考页(https://code.kx.com/v2/ref/mod/)所示,mod函数仅返回正值。因此,您的示例中-7 mod 2
和a 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》。