我是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!