我想在 Perl 中检查和操作任意 Perl 过程的代码(由 coderefs 获得)。是否有用于此的工具/模块/库?类似于B::Concise的东西,除了 B::Concise 在输出上打印代码,但我想以编程方式检查它。
我想像这样使用它。给定一个 coderef F
,它被称为例如。有 10 个参数:
$ret = &$F(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10);
我想创建一个函数F1
,st。
&$F(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) ==
&$F1(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)*
&$C(x2, x3, x4, x5, x6, x7, x8, x9, x10)
那就是将它“分解”成两部分,第二部分不依赖,x1
第一部分尽可能简单(我假设F
它是一个巨大的产品)。
我想要的应用程序是Metropolis 采样算法的优化- 假设我正在对分布进行采样p(x1 | x2 = X1, x3 = X3, ...) = f(x1, x2, x3, ...)
。算法本身是不变的。乘法常数因子和其他变量不会通过算法改变,因此根本不需要评估不依赖的部分x1
(即从上面)。$c
联合概率可能有例如。以下形式:
p(x1, x2, x3, x4, x5) = g1(x1, x2)*g2(x2, x3)*g3(x3, x4)*g4(x4, x5)*g5(x4, x1)*g6(x5, x1)
我还考虑将其构造p
为一个对象,该对象由具有特定因素所依赖的变量的注释的因素组成。即使这也将受益于代码自省(自动确定变量)。