Kdb 在作为函数调用应用的上下文中,q@符号在做什么?

Kdb 在作为函数调用应用的上下文中,q@符号在做什么?,kdb,q-lang,Kdb,Q Lang,这里的示例中发生了什么 资料来源: @[L;I;f;y] L=您的列表 I=要修改的元素索引 f=要应用的函数 y=f的第二个参数 通过将+放入函数并添加一些日志输出,您可以看到它在做什么。在这种情况下,它索引到第二个元素d@1,检索(8 9;10;11 12),添加3,生成(11 12;13;14 15),将其用作下一个输入,添加3,生成(14 15;16;17 18) q)@[d;1 1 1;{0N!("x is:",.Q.s1 x;"y is:",.Q.s1 y);x+y};3]

这里的示例中发生了什么

资料来源:

@[L;I;f;y]
L=您的列表
I=要修改的元素索引
f=要应用的函数
y=f的第二个参数

通过将
+
放入函数并添加一些日志输出,您可以看到它在做什么。在这种情况下,它索引到第二个元素
d@1
,检索
(8 9;10;11 12)
,添加3,生成
(11 12;13;14 15)
,将其用作下一个输入,添加3,生成
(14 15;16;17 18)

    q)@[d;1 1 1;{0N!("x is:",.Q.s1 x;"y is:",.Q.s1 y);x+y};3]
    ("x is:(8 9;10;11 12)";"y is:3")
    ("x is:(11 12;13;14 15)";"y is:3")
    ("x is:(14 15;16;17 18)";"y is:3")
    (1 2 3;4 5 6 7)
    (17 18;19;20 21)
    (13 14;15 16 17 18;19 20)
或者可以使用over(
/
)查看它:

    q)@[d;1 1 1;{0N!("x is:",.Q.s1 x;"y is:",.Q.s1 y);x+y};3]
    ("x is:(8 9;10;11 12)";"y is:3")
    ("x is:(11 12;13;14 15)";"y is:3")
    ("x is:(14 15;16;17 18)";"y is:3")
    (1 2 3;4 5 6 7)
    (17 18;19;20 21)
    (13 14;15 16 17 18;19 20)
    q)@/[d;;{0N!(x;y);x+y};3]1 1 1
    ((8 9;10;11 12);3)
    ((11 12;13;14 15);3)
    ((14 15;16;17 18);3)
    (1 2 3;4 5 6 7)
    (17 18;19;20 21)
    (13 14;15 16 17 18;19 20)