如何在ProLog中排除某些输出结果?

时间:2017-12-05 17:44:32

标签: prolog output

我是ProLog的新手,我遇到了问题。在输出中我有两个相似的结果,我希望排除其中一个。我将粘贴代码和查询后跟输出,以便您可以看到。

methylation(m1).
methylation(m2).
methylation(m3).
methylation(m4).
methylation(m5).
methylation(m6).
...

gene(a).
gene(b).
gene(c).
gene(d).
gene(e).

related_genes(a,c).
related_genes(b,d).

gene_has_met(a, [m1,m2,m5]).
gene_has_met(b, [m1,m7,m8,m14]).
gene_has_met(e, [m20]).
gene_has_met(c, [m20]).

same(X,Y) :- X == Y.

genes_have_same_met(G1,G2,M) :- gene(G1), gene(G2),
    gene_has_met(G1,M),gene_has_met(G2,M),
    not(same(G1,G2)), same(M,M).

linked_genes(G1,G2) :- gene(G1), gene(G2),
    related_genes(G1,G2); genes_have_same_met(G1,G2,_).

当我问下面的查询时,我希望得到这个结果:

?- linked_genes(Gene1,Gene2).
Gene1 = a,
Gene2 = c ;
Gene1 = b,
Gene2 = d ;
Gene1 = c,
Gene2 = e ;
false.

但是,我得到了这个结果:

Gene1 = a,
Gene2 = c ;
Gene1 = b,
Gene2 = d ;
Gene1 = c,
Gene2 = e ;
Gene1 = e,
Gene2 = c ;
false.

你有没有看到,我有两个相似的结果,因为它等于 Gene1 = c Gene2 = e 或相反。所以我想从输出中删除其中一个。 我怎样才能做到这一点? TY!

0 个答案:

没有答案