我基本上是接听集编程(CLINGO)的初学者,所以我现在已经尝试了几个小时。
人(A; B; C; d; e; F)。
喜欢(b,e; d,f)。
不喜欢(a,b; c,e)。
彼此喜欢的人必须在同一个集合中,并且不能与他们不喜欢的人在同一个集合中。 所以输出应该是: b,e | a,c,d,f
我知道它背后的逻辑;对它进行分区,以便如果一个元素同时存在。不喜欢,那么它应该在它自己的集合中,而在另一个集合中。但这是声明式编程,所以我不确定如何解决这个问题。任何帮助将不胜感激。
答案 0 :(得分:0)
尝试这个,它应该适合你:
person(a;b;c;d;e;f).
like(b,e; d,f).
dislike(a,b; c,e).
group(1..2).
% every person belongs to one group only.
1{in(S,G): group(G)}1 :- person(S).
% no two persons who do dislike each other are in the same group
:- in(X, G), in(Y, G), dislike(X,Y).
#show in/2.
您将得到的结果是:
a& b属于不同的群体。
和c& e属于不同的群体。