我正在开发一个推理引擎,这意味着基本上我有一定数量的“事实”,这些“事实”基本上代表了某个时刻的世界。连同事实(通常只有两个,起始状态和目标状态),我有许多规则(对于某些问题,实际上可能是数百个)。推理引擎的目标是,给定一个起始状态和一组规则,找到到达可接受目标状态的最短路径。这可以通过多种算法来完成,例如 DFS、BFS 或 A*。该程序的基本结构是:
事实事实名称 属性1 =“价值”; 属性 2 = [ 1, 2, 3]; 属性3 = 4; 属性4 = 7; ... 最终事实 规则规则一 等于(属性,“值”)或 大于(属性,5) > 删除(属性); 结束规则 规则规则二 isprimeinteger(属性) > 添加(属性,1) 结束规则
在规则中,LHS(> 之前的部分)匹配事实中等于“值”的每个属性。factname
在这种情况下,它只有一个,但可能有很多。这意味着我必须解析变量(通常为同一事实多次解析),并且规则的 LHS 可能有多个条件放入和/或具有适当的优先级解析。
问题是:有没有办法有效地解决这种变量?我现在正在做的是迭代事实中的每个属性,基本上我正在生成一个非常大的 n-ary 树,它甚至是不平衡的,这非常慢,特别是考虑到上述条件。
我喜欢这种模式匹配的论文指针