如何避免重复Prolog结果?

时间:2015-11-15 16:30:43

标签: prolog rules

我在prolog中写了一个程序,我有下一个代码:

isa(dumbo, smallelephant).
isa(cuatropataspequeñas, extremidad).
isa(cuatropatas, extremidad).
isa(trompa, cabeza).
isa(smallelephant, elephant).
isa(elephant, animal).

subclass(Class, Sup) :- isa(Class, Sup).
subclass(Class, Sup) :- isa(Class, Midclass), subclass(Midclass, Sup).

partOf(head, animal).
partOf(tip, animal).
partOf(t1, smallelephant).
partOf(t2, elephant).
partOf(h1, elephant).

hasPart(Object, Part) :- partOf(Part, Object).

hasPart(Object, Part) :- subclass(Object, Class), hasPart(Class, Part), not(is(_,Part)).

根据这些事实和规则,我在执行“hasPart(dumbo,X)”时获得了结果。是下一个:

?- hasPart(dumbo, X).
X = t1;
X = t2;
X = h1;
X = t2;
X = h1;
false.

但我只想得到t1,t2和t3。我怎么能这样做?

非常感谢你!

0 个答案:

没有答案