如何检查Prolog是否会返回false?

时间:2014-12-11 08:20:31

标签: prolog return

以下是我的代码的一部分:

find_paths(A, B) :-
    path([A], B, Path, 0, Length),
    reverse(Path, DirectPath),
    printPath(DirectPath),
    writef(' with distance of %d\n', [Length]),
    ("IF PROLOG RETURN FALSE", write('End'); fail).

所有其他部分工作正常,除非我希望它在从循环中检索数据库中的所有数据后检查它是否返回false。 “如果PROLOG返回错误”是我想插入检查部分的地方,但我不知道该放什么。 我尝试了下面的代码,但它没有输出'结束'字样。

find_paths(A, B) :-
    path([A], B, Path, 0, Length),
    reverse(Path, DirectPath),
    printPath(DirectPath),
    writef(' with distance of %d\n', [Length]),
    fail,
    write('End').

2 个答案:

答案 0 :(得分:0)

如果目标失败,为了打印消息,您可以使用以下内容:

p:- goal, !.
p:- write('Failed').

现在,如果您尝试满足p,Prolog将使用第一条规则。如果goal成功,则剪切操作符将删除先前为目标p创建的选择点,并且不会使用第二个规则。如果goal失败,Prolog会回溯到满足p,使用第二个子句并显示消息。

可能是一个问题:由于剪切运算符,goal最多只能满足一次。

答案 1 :(得分:0)

我认为您可以按照Tudor的建议进行操作,并允许通过以下方式回溯:

p:- goal.
p:- not(goal), write('Failed').