如何在prolog中打印所有数据库事实

时间:2011-12-14 19:47:35

标签: prolog

我在prolog中有一个数据库,我想要做的就是通过它的元素进行实验并逐个打印。怎么办呢?

fact(is(mike,asthmatic)).
fact(has(andy,highPressure)).
fact(is(mike,smoker)).

我写过这个,但是它可以正常运行,但它会从数据库中删除元素,所以我想在不删除的情况下访问它们。

print:- 
  retract(factA(P)),
    write(factA(P)),nl,
    fail.
  print.

2 个答案:

答案 0 :(得分:4)

您也可以考虑使用forall/2谓词:

print:-
 forall(fact(P), writeln(P)).

答案 1 :(得分:2)

嗯,你几乎就在那里:

print :-
    fact(A),
    writeln(A),

首先,我们得到一个事实并打印出来。

    fail;true.

然后,我们回溯(通过失败)直到没有剩下解决方案。为了避免返回false,我们将析取为true。

请注意,您可以采用不同的方式,例如:

print2 :-
    findall(Fact, fact(Fact), Facts),
    maplist(writeln, Facts).

但如果你走这条路,更喜欢@gusbro解决方案,那就更好了!