Prolog中的规则依赖图

时间:2010-11-18 21:31:49

标签: prolog

假设我想在Prolog中为Prolog程序制作规则依赖图。例如,以下程序

foo(X) :- bar(X, 0).
bar(A, B) :- quux(A), coox(B).
baz.

会导致以下情况成立(使用assert):

depends(foo, [bar]).
depends(bar, [quux, coox]).
depends(baz, []).

或类似上面我可以轻松用来制作图表的东西。我一直在考虑的方法是将输入文件的行作为字符串读取并对它们执行一些简单的搜索和替换,但这看起来像一个丑陋的,非Prolog般的黑客。还有其他任何利用Prolog金属功能的选项吗?

1 个答案:

答案 0 :(得分:3)

无需以(非结构化)字符串的形式读取文件:Prolog源文件是一系列有效的Prolog 术语,您可以阅读这些子句(例如,阅读/ 1和他们的理由就像你对任何其他术语一样。 (: - )/ 2已经是一个预定义的运算符,然后您可以使用Prolog的内置metapredicates(arg / 3,functor / 3,= .. / 2等)轻松检查子句。这会像您期望的那样自动处理源级别的注释等。