在kdb + / q中,如何通过顺序的函数列表来管道数据,以便上一步的输出是下一步的输入?
例如:
q)t:([]sym:`a`c`b;val:1 3 2)
q)`sym xkey `sym xasc t / how to achieve the same result as this?
我认为over
或/
的某些变体可以起作用:
?? over (xasc;xkey)
加分:如何以t
从右侧传递出来的方式实现同样的目标(本着左右的精神读取q语法)?
(xasc;xkey) ?? t
答案 0 :(得分:5)
如何通过顺序的函数列表来管道数据,以便上一步的输出是下一步的输入?
您可以使用鲜为人知的composition operator。例如:
q)f:('[;])over(2+;3*;neg)
q)f 1 # 2+3*neg 1
-1
如果您想使用正确语法的左侧,则必须定义自己的动词:
q).q.bonus:{(('[;])over x)y}
q)(2+;3*;neg)bonus 1
-1
答案 1 :(得分:2)
使用左边的lambda和over副词(递归的形式) 此外,apply(。)形式的apply用于将函数应用于表和列:
{.[y;(z;x)]}/[t;(xasc;xkey);`sym]
sym| val
---| ---
a | 1
b | 2
c | 3