Prolog SLD树生成器

Prolog SLD树生成器,prolog,Prolog,我的任务是为给定的Prolog程序和查询编写一个可视化SLD树的工具。 因此,由于我不希望自己实现一个完整的Prolog解析器和解释器,我正在寻找一个库或程序来为我生成树,因此我只需要做可视化部分。 最好的情况是C++库,但是任何公共语言都会做(或者将树输出为XML文档或类似的程序)。 到目前为止我什么也找不到,所以我把希望寄托在你们身上 致意 Uzaku您可以在Prolog中编写一个Prolog元解释器,生成一个文件中的树表示,然后将其用作工具的输入。最简单的元解释器是这个,它只处理连词(逗号

我的任务是为给定的Prolog程序和查询编写一个可视化SLD树的工具。 因此,由于我不希望自己实现一个完整的Prolog解析器和解释器,我正在寻找一个库或程序来为我生成树,因此我只需要做可视化部分。 最好的情况是C++库,但是任何公共语言都会做(或者将树输出为XML文档或类似的程序)。 到目前为止我什么也找不到,所以我把希望寄托在你们身上

致意
Uzaku

您可以在Prolog中编写一个Prolog元解释器,生成一个文件中的树表示,然后将其用作工具的输入。最简单的元解释器是这个,它只处理连词(逗号运算符)

您应该为其他语言构造添加更多子句,如析取(分号),并在需要时支持剪切。为了生成树,谓词中还需要有一个或多个参数。你应该注意无限的树,限制树的深度是个好主意。最后,在一些Prolog系统中使用
子句/2
需要事先声明要访问其子句的谓词


更新:无需在第3条中使用
非AR/1

嘿,谢谢你的回答,我会深入研究的。但现在我把问题留着,希望有人知道lib或工具。不客气!我认为,当应用解释器的程序位于Prolog的子集中,并且具有一组受限的结构和预定义的谓词时,这种解决方案将非常容易实现。因为您的目标与SLD分辨率有关,所以这里可能就是这种情况。
prolog(true) :- !.
prolog((X,Y)) :- !, prolog(X), prolog(Y).
prolog(H) :- clause(H,Body), prolog(Body).