【发布时间】:2010-10-05 00:10:32
【问题描述】:
我想在 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 sampling algorithm 的优化 - 假设我正在对分布 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 构造为一个对象,该对象由具有特定因子所依赖的变量的注释的因子组成。即使这样也可以从代码自省(自动确定变量)中受益。
【问题讨论】:
标签: perl code-analysis abstract-syntax-tree bytecode-manipulation