Perlで任意のPerlプロシージャ(coderefsによって取得)のコードを検査して操作したいと思います。そのためのツール/モジュール/ライブラリはありますか?B :: Conciseに似ていますが、B :: Conciseが出力にコードを出力する点が異なりますが、プログラムで検査したいと思います。
こんな感じで使いたいです。F
たとえばと呼ばれるcoderefが与えられます。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)
つまり、2つの部分に「因数分解」します。2つ目は依存せずx1
、1つ目は可能な限り単純です(私はF
巨大な製品として構築されていると思います)。
これが必要なアプリケーションは、メトロポリスサンプリングアルゴリズムの最適化です。分布をサンプリングしていると仮定します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
また、特定の因子が依存する変数の注釈が付いた因子で構成されるオブジェクトとして構築することも検討します。これでも、コードのイントロスペクション(変数を自動的に決定する)の恩恵を受けます。