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 该符号的值(或本例中的函数定义)。
然后您可以使用 ssr
将 f
中的函数替换为存储在字典 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
我想在打印外部函数的定义时打印任何嵌套函数的函数定义。示例:
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 该符号的值(或本例中的函数定义)。
然后您可以使用 ssr
将 f
中的函数替换为存储在字典 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