@和之间的区别。在kdb中修改

时间:2017-11-23 22:36:51

标签: kdb q-lang

我一直在阅读KX维基上的@修正案,其中指出:

  

@(修订)

     

语法:@[x;i;f]
  语法:@[x;i;f;a]
  语法:@[x;i;f;v]

     

功能修正凡

     

x是一个列表(或文件符号,见提示)
  i是索引为x的int矢量   f是一个功能
  af的第二个参数域中的原子   vf

的第二个参数域中的向量

使用似乎行为相似的@.混淆,我尝试使用空列表代替索引,发现每个列表都区别对待:

q)a
1 2 3
q)@[a;();+;100]
1 2 3
q).[a;();+;100]
101 102 103

似乎使用@使用()等于'无索引'而使用.等于'所有索引'。为什么会出现这种对比行为?

1 个答案:

答案 0 :(得分:0)

差异可以降低到两种修正的嵌套水平。 @用于多级嵌套,enlist用于单个级别(列表)。通过在使用.时将a与索引一起使用,我们将索引嵌套并为您提供的q)a 1 2 3 q)@[a;();+;100] 1 2 3 q).[a;enlist();+;100] 1 2 3 q)@[a;(::);+;100] 101 102 103 q).[a;enlist(::);+;100] 101 102 103 q)@[a;1 2;+;100] 1 102 103 q).[a;enlist 1 2;+;100] 1 102 103 这样的简单列表获取相同的输出:

()

.(::)一起使用等同于登记的空函数q)show m:3 cut 1+til 9 1 2 3 4 5 6 7 8 9 q)@[m;1 2;+;100] 1 2 3 104 105 106 107 108 109 q).[m;enlist 1 2;+;100] / nest with enlist 1 2 3 104 105 106 107 108 109 q).[m;(1 2;::);+;100] / nest with null func 1 2 3 104 105 106 107 108 109

应该注意的是,这种关系适用于复杂的列表:

<dependency>
    <groupId>org.lwjgl</groupId>
    <artifactId>lwjgl</artifactId>
    <version>${lwjgl.version}</version>
</dependency>