如何在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手册,这是一个相当复杂的参数,涉及系统的内部工作以及您所针对的语言的“架构”
当然,除了你能看到的,没有正确的输出。这就是你写的语义