Я хотел бы проверять и манипулировать кодом произвольных процедур Perl (получаемых coderefs) в Perl.Есть ли инструмент / модуль / библиотека для этого?Нечто похожее на B :: Concise , за исключением того, что B :: Concise печатает код на выходе, но я хотел бы проверить его программно.
Я хотел бы использовать его какэтот.Дан кодовый номер 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
создан как огромный продукт).
Приложение, для которого я хочу это оптимизация Метрополисалгоритм - предположим, что я выбираю распределение 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
как объекта, состоящего из факторов с аннотациями, от которых зависит тот или иной фактор.Даже это извлекло бы пользу из интроспекции кода (автоматического определения переменных).