代码之家  ›  专栏  ›  技术社区  ›  tenticon

kdb-打印外部函数体时解析嵌套函数

kdb
  •  0
  • tenticon  · 技术社区  · 7 年前

    在打印外部函数的定义时,我想打印任何嵌套函数的函数定义。例子:

    g:{sin x}
    f:{cos g x}
    

    当我打印 f 我得到 {cos g x} 但我想得到 {cos {sin x} x}

    谢谢你的帮助

    1 回复  |  直到 7 年前
        1
  •  4
  •   A. Henderson    7 年前

    据我所知,使用内置函数是不可能实现这一点的。

    你可以尝试编写自己的函数来实现这一点,但最终会很痛苦。可能是这样的:

    q)m:string[v]!string value each v:value[f][3] except `
    

    创建字典m:

    q)m
    ,"g"| "{sin x}"
    

    当给定一个函数时 value 返回包含的列表 (bytecode;parameters;locals(context;globals);constants[0];...;constants[n];definition)

    但是,如果我们通过 symbol 价值 它返回该符号的值(在本例中是函数定义)。

    你可以用 ssr 替换中的函数 f 函数定义存储在字典中 m .

    q)ssr/[last value[f];key m;value m]
    "{cos {sin x} x}"
    

    但要确保您的功能稳定和适应不同的功能将是非常困难的。

    有关如何 价值 看看这里: https://code.kx.com/q/ref/metadata/#value

    对于 SSR 检查此链接: https://code.kx.com/q/ref/strings/#ssr

    推荐文章