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