首页 > 解决方案 > kdb - 打印外部函数体时解析嵌套函数

问题描述

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

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

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

谢谢您的帮助

标签: kdb

解决方案


据我所知,使用内置功能是不可能实现的。

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

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)

但是,如果我们将 a 传递symbolvalue它,则返回该符号的值(或本例中的函数定义)。

然后,您可以使用存储在字典中的函数定义ssr来替换函数。fm

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

但是要保证你的功能稳定并能适应不同的功能是非常困难的。

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

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


推荐阅读