有没有办法动态查询序言知识库?
我在文件family.pl中有prolog逻辑(我在这里找到的一个例子http://www.techytalk.info/prolog-programming-gprolog-linux/)。以下是其内容:
mother_child(trude, sally).
father_child(tom, sally).
father_child(tom, erica).
father_child(mike, tom).
sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y).
parent_child(X, Y) :- father_child(X, Y).
parent_child(X, Y) :- mother_child(X, Y).
我希望能够在不进入prolog解释器的情况下进行查询。
此命令对我不起作用:
swipl -f family.pl -g "father_child(Father, Child)"
由于
答案 0 :(得分:4)
查询 工作:如果以这种方式调用程序,则只是看不到结果。
因此,您可以自己打印结果,例如:
swipl -f family.pl -g "father_child(Father,Child), \ portray_clause(father_child(Father, Child))"
这会产生:
father_child(tom, sally). ?-
当然不是所有,所以你可以使用false/0
强制回溯:
swipl -f family.pl -g "father_child(Father,Child), \ portray_clause(father_child(Father, Child)), \ false"
并产生:
father_child(tom, sally). father_child(tom, erica). father_child(mike, tom). ?-
使用 -t halt
暂停该计划,而不是返回到顶层:
swipl -f family.pl -g "father_child(Father,Child), \ portray_clause(father_child(Father, Child)), \ false" -t halt
现在终于有了:
father_child(tom, sally). father_child(tom, erica). father_child(mike, tom).
P.S。:对于谓词来说,这是一个非常好的命名约定!