我在prolog中有一个数据库,我想要做的就是通过它的元素进行实验并逐个打印。怎么办呢?
fact(is(mike,asthmatic)).
fact(has(andy,highPressure)).
fact(is(mike,smoker)).
我写过这个,但是它可以正常运行,但它会从数据库中删除元素,所以我想在不删除的情况下访问它们。
print:-
retract(factA(P)),
write(factA(P)),nl,
fail.
print.
答案 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解决方案,那就更好了!