是否有更快的方法来编译或索引大量事实以提高速度?我有大约30K链接形式的事实(groupid,id)
并尝试找到给定id的连接,但它确实很慢 . 我使用规则
connected(Id1,Id2) :-
linked(Grp1,Id1),
linked(Grp1,Id2),
\+Id1=Id2.
connected(Id1,Id2) :-
connected(Id1,Id3),
connectedId3,Id2),
\+Id1=Id2,!.
最好的祝福
泰
1 回答
大多数Prolog在谓词的第一个参数上使用索引,因此重新排序参数有时可能是一个好主意 . 在某些Prolog方言中,例如SWI,您可以使用:-index指令明确指出索引应该如何完成 .
您的实现建议使用传递闭包变体 . 如果将Id1和Id2接地,则可以考虑区分递归和非递归情况(1)并通过调用非递归情况(2)将第一个调用替换为第二个子句体中的connected / 2 . 最后,您可以考虑跟踪已访问的ID,这样您就不需要重新访问它们了 .