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

kdb - resolving nested function when printing outer function body

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

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

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

感谢您的帮助

据我所知,使用内置函数无法实现这一点。

您可以尝试编写自己的函数来执行此操作,但最终会很痛苦。可能是这样的:

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

创建字典 m :

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

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

的列表

但是,如果我们将 symbol 传递给 value 它 returns 该符号的值(或本例中的函数定义)。

然后您可以使用 ssrf 中的函数替换为存储在字典 m.

中的函数定义
q)ssr/[last value[f];key m;value m]
"{cos {sin x} x}"

但是要保证你的功能稳定,适配不同的功能就很难了。

有关如何 value 的更多详细信息,请查看此处:https://code.kx.com/q/ref/metadata/#value

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