Я хотел бы проверять и управлять кодом произвольных процедур Perl (полученных с помощью coderefs) в Perl. Есть ли для этого инструмент / модуль / библиотека? Что-то похожее на B :: Concise, за исключением того, что B :: Concise печатает код на выходе, но я хотел бы проверить его программно.
Я бы хотел использовать его вот так. Учитывая кодовую ссылку F
, которая называется, например. с 10 аргументами:
$ret = &$F(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10);
Я хочу создать функцию F1
, ул.
&$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
сконструирован как огромный продукт).
Приложение, для которого я хочу это сделать, - это оптимизация алгоритма выборки метрополии - предположим, я Пробую раздачу 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
как объекта, состоящего из факторов с аннотациями переменных, от которых зависит тот или иной фактор. Даже это выиграет от самоанализа кода (автоматического определения переменных).