如何在Prolog中获取用于获取查询解决方案的所有事实?

如何在Prolog中获取用于获取查询解决方案的所有事实?,prolog,fact,Prolog,Fact,我试图打印用于获取查询解决方案的所有事实,如果统一失败,我希望什么也不打印。所以我写下: a:- b,c,writeln(b^c->a). b:- d,writeln(d->b). c:- fail,writeln(e->c). d:- writeln(d). a:- b,d,writeln(b^d->a). 然而,当我查询a.时,我得到了以下输出: d d->b d d->b d b^d->a true. 有

我试图打印用于获取查询解决方案的所有事实,如果统一失败,我希望什么也不打印。所以我写下:

a:-
    b,c,writeln(b^c->a).
b:-
    d,writeln(d->b).
c:-
    fail,writeln(e->c).
d:-
    writeln(d).
a:-
    b,d,writeln(b^d->a).
然而,当我查询
a.
时,我得到了以下输出:

d
d->b
d
d->b
d
b^d->a
true.

有人似乎告诉我,Prolog有一个内置的机制来显示用于执行查询的所有事实。他是真的吗?如何获得正确的输出?

您的程序没有变量,因此没有统一

编辑:或者更好,从抽象意义上讲,序言在一系列Horn子句之间进行选择,这些Horn子句将当前目标与每个规则头统一起来。但是,为了提高性能,实际的序言用索引取代了选择阶段,并尝试统一参数

调用
a
时,调用
b
c
打印表达式

显示查询中使用的所有规则的内置机制可能是。有关详细信息,请参阅您的Prolog手册,这是一个相当复杂的参数,涉及系统的内部工作以及您所针对的语言的“架构”

当然,除了你能看到的,没有正确的输出。这就是你写的语义