В этой ссылке ( Meta Interpreter ) я считаю, что нашел изящный способ решения проблемы, которую мне нужно решать, но, поскольку мой пролог очень плохой, я сначала спросил бы, возможно ли вообще, что Я имею в виду.
Я хочу преобразовать определенные части рабочего процесса / графика в зависимости от набора правил. График в основном состоит из последовательностей (a-> b) и split / join, которые являются либо параллельными, либо условными, то есть два шага выполняются параллельно в рабочем процессе или выбирается одна ветвь в зависимости от условия (само условие не имеет значения на этом уровне) (параллельное разбиение - (a && b) - параллельное соединение) и т. д. Теперь у графа обычно есть узлы и ребра, в форме использования терминов, которые я хочу избавить от ребер.
Кроме того, у каждого узла есть атрибут партнера, указывающий, кто его будет выполнять.
Я попытаюсь привести простой пример того, чего я хочу достичь:
Узел с именем A, выполненный партнером X, соединенный с узлом с именем B, выполненный партнером Y.
A_X -> B_Y
seq((A,X),(B,Y))
Если я обнаружу подобный шаблон, то есть два шага в последовательности с разными партнерами, я хочу заменить его на:
A_X -> Send_(X-Y) -> Receive_(Y-X) - B_Y // send step from X to Y and a receive step at Y waiting for something from X
seq((A,X), seq(send(X-Y), seq(receive(Y-X), B)))
Если бы кто-нибудь мог дать мне несколько советов или помочь найти решение, я был бы очень благодарен!