[KDB + / Q]:在数据上依次应用功能列表(管道)

Dan*_*ian 2 currying kdb q-lang

在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?
Run Code Online (Sandbox Code Playgroud)

我猜想有些变化over/可以工作:

   ?? over (xasc;xkey)
Run Code Online (Sandbox Code Playgroud)

优点:如何实现t从右侧插入的方式(本着q语法左右读法的精神)?

(xasc;xkey) ?? t
Run Code Online (Sandbox Code Playgroud)

Ale*_*sky 5

如何通过函数的顺序列表传递数据,以便将上一步的输出作为下一步的输入?

您可以使用鲜为人知的合成运算符。例如:

q)f:('[;])over(2+;3*;neg)
q)f 1 # 2+3*neg 1
-1
Run Code Online (Sandbox Code Playgroud)

如果要使用左右语法,则必须定义自己的动词:

q).q.bonus:{(('[;])over x)y}
q)(2+;3*;neg)bonus 1
-1
Run Code Online (Sandbox Code Playgroud)