我的任务是编写一个工具,为给定的 Prolog 程序和查询可视化 SLD 树。因此,由于我不想自己实现整个 Prolog 解析器和解释器,所以我正在寻找为我生成该树的库或程序,因此我只需要执行可视化部分。最好的情况是 C++ 库,但任何通用语言都可以(或将树输出为 xml 文档或类似文件的程序)到目前为止我找不到任何东西,所以我把希望寄托在你们身上。
最好的问候 Uzaku
我的任务是编写一个工具,为给定的 Prolog 程序和查询可视化 SLD 树。因此,由于我不想自己实现整个 Prolog 解析器和解释器,所以我正在寻找为我生成该树的库或程序,因此我只需要执行可视化部分。最好的情况是 C++ 库,但任何通用语言都可以(或将树输出为 xml 文档或类似文件的程序)到目前为止我找不到任何东西,所以我把希望寄托在你们身上。
最好的问候 Uzaku
您可以在 Prolog 中编写一个 Prolog 元解释器,它将树的表示生成到文件中,然后将其用作工具的输入。最简单的元解释器是这个,它只处理连词(逗号运算符)
prolog(true) :- !.
prolog((X,Y)) :- !, prolog(X), prolog(Y).
prolog(H) :- clause(H,Body), prolog(Body).
您应该为其他语言结构添加更多子句,例如析取(分号),并在需要时支持剪切。为了生成树,您还需要在谓词中包含一个或多个参数。而且你应该注意无限的树,限制树的深度是个好主意。最后,clause/2
在某些 Prolog 系统中使用 需要某种预先声明您想要访问其子句的谓词。
更新:不需要nonvar/1
第 3 个子句。