首先,我无法理解exec和selectin之间的区别kdb。exec的参考并没有多大帮助!
其次,我正在尝试编写一个程序来解决欧拉问题 5。我通过使用modand解决了它each,但它很慢并且需要大量空间。我相信我可以通过将 20 的素数分解的值相加来做到这一点。那是对的吗?如果是这样,任何人都可以帮助我这样做吗?我写了以下内容来获得素数分解。它还不能接收列表。
f1:{(x mod y) = 0}
f2:{if[f1[a;y]&(not max f1[y;x],0);x:x,y];x}
f3:{x+:1;y:f2[y;x];if[x<a;y:.z.s[x;y]];y}
f3[1;()
Run Code Online (Sandbox Code Playgroud)
小智 5
关于你的第一个问题,exec本质上是select. 一个select查询将返回你的表格形式的查询什么,而一个exec更加灵活,可以从表中返回你想要的任何类型的数据。例如,如果我们有一张桌子
t:([]a:10?`aa`bb`cc;b:10?10)
Run Code Online (Sandbox Code Playgroud)
然后我们可以使用 exec 从表中获取列数据的列表
q)exec a from t
`cc`aa`aa`aa`bb`aa`bb`cc`cc`cc
Run Code Online (Sandbox Code Playgroud)
这有时非常方便。还
q)exec a,b from t
a| cc aa aa aa bb aa bb cc cc cc
b| 6 4 1 3 3 7 8 2 1 4
q)exec a!b from t
cc| 6
aa| 4
aa| 1
aa| 3
bb| 3
aa| 7
bb| 8
cc| 2
cc| 1
cc| 4
Run Code Online (Sandbox Code Playgroud)
它提取字典。第一个将列名作为键,列作为值,第二个将 aa 列作为键,b 列作为值。在创建数据透视表http://code.kx.com/q/cookbook/pivoting-tables/ 中可以看到这些使用中的一个很好的小例子。
最后,您可以使用
exec by 0b from t
Run Code Online (Sandbox Code Playgroud)
这相当于
select from t
Run Code Online (Sandbox Code Playgroud)
该by 0b是在SELECT语句中隐含的。事实上,你可以通过查看两者的解析树来看到这一点。
q)parse"exec from t"
?
`t
()
()
()
q)parse"select from t"
?
`t
()
0b
()
Run Code Online (Sandbox Code Playgroud)