在这个链接(Meta Interpreter)中,我相信已经找到了一种解决我必须解决的问题的好方法,但由于我的序言非常糟糕,我首先要问的是它是否有可能我所拥有的心神。
我想根据一组规则转换工作流/图表的某些部分。图形基本上由序列(a-> b)和分割/连接组成,它们是并行的或条件的,即两个步骤在工作流程中并行运行,或者根据条件选择单个分支(条件本身不是这个级别上的问题)(并行拆分 - (a&& b) - 并行连接)等等。现在一个图形通常有节点和边缘,使用我希望摆脱边缘的术语的形式。
此外,每个节点都有一个partner属性,指定谁将执行它。
我将尝试给出一个简单的例子:
一个名为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)))
如果有人能给我一些指示或帮助提出解决方案,我将非常感激!
答案 0 :(得分:0)
图形基本上由序列(a-> b)和分割/连接组成,它们是平行的或条件的,即在工作流程中并行运行两个步骤,或者根据条件选择单个分支
这听起来很像and/or graph。这些图中的Prolog算法由Ivan Bratko在Prolog Programming for Artificial Intelligence第13章中介绍。即使您的图形不是真实的和/或图形,您也可以根据自己的任务调整其中一些算法。