代码之家  ›  专栏  ›  技术社区  ›  Daniel Krizian

[KDB+/Q]:在数据上按顺序应用函数列表(管道)

  •  4
  • Daniel Krizian  · 技术社区  · 9 年前

    在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
    
    2 回复  |  直到 9 年前
        1
  •  7
  •   Will Da Silva Alex Martelli    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
    
        2
  •  2
  •   jomahony    9 年前

      {.[y;(z;x)]}/[t;(xasc;xkey);`sym]
      sym| val
      ---| --- 
      a  | 1
      b  | 2
      c  | 3
    
    推荐文章