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

时间:2018-06-19 13:22:12

标签: kdb

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

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

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

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

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传递给value,它将返回该符号的值(在这种情况下为函数定义)。

然后,您可以使用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,请检查以下链接: https://code.kx.com/q/ref/strings/#ssr