将副词应用于冒号操作符

问题描述 投票:1回答:1

请帮我解决结肠问题 : 操作员,我被它的工作原理所困扰。它的工作原理是通过 x+:1,全球任务视图 ::, IO 0:, 1:,从函数中间返回值。:r,并得到运算符的单调形式。#:.

但如果用副词来形容呢?我试过这样的方法。

$ q
KDB+ 3.6 2019.04.02 Copyright (C) 1993-2019 Kx Systems
q)(+')[100;2 3 4]
102 103 104
q)(:')[x;2 3 4]
'x
  [0]  (:')[x;2 3 4]
            ^
q)(:')[100;2 3 4]
2 3 4

我希望评价的顺序是: x:2, 然后... x:3那么 x:4. 要获得 x:4 结果。但我有一个错误。还有 :' 与一些 100 不知道什么原因。

ぐ或 :' 究竟是在做什么?

q)parse "(:')[100;2 3 4]"
(';:)
100
2 3 4

解析并没有给我带来什么启示,所以请大家帮忙。

kdb k
1个回答
3
投票

当被迭代器修改时(q说也叫副词)。: 就像其他二进制运算符一样。在你的例子中

q)(:')[100;2 3 4]
2 3 4

原子 100 延伸到一个符合要求的列表 100 100 100 然后 : 被应用于两个列表中的元素配对。返回最终结果。它可能看起来很混乱 (: 试图修改一个常量值,真的吗?)但如果你把它和其他二进制操作符进行比较,就会发现它们从不修改操作数,而是返回一个 结果 的表达方式,一切都应该一拍即合。

例如,比较

q)+'[100; 2 3 4]
102 103 104

q)(:')[100;2 3 4]
2 3 4

在这两种情况下,一个临时向量 100 100 100 隐式创建,并对其应用一个运算符,并且 2 3 4. 所以前者在语义上等同于

(t[0]+2;t[1]+2;t[2]+4)

而后者则是

(t[0]:2;t[1]:2;t[2]:4)

哪儿 t 就是那个临时向量。

这就解释了为什么 (:')[x;2 3 4] 给出错误 -- 如果 x 不存在,kdb不能将其扩展为一个列表。

© www.soinside.com 2019 - 2024. All rights reserved.