请帮我解决结肠问题 :
操作员,我被它的工作原理所困扰。它的工作原理是通过 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
解析并没有给我带来什么启示,所以请大家帮忙。
当被迭代器修改时(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不能将其扩展为一个列表。