在Prolog中测试软件包冲突
问题描述:
这是一个Prolog程序,我想检查Linux软件包之间的依赖关系以及是否存在任何冲突。在Prolog中测试软件包冲突
dep(gnome1,gcc7).
confl(gcc7,gcc8).
% recursive chain dependency
depend(X,Y):- dep(X,Y).
depend(X,Y):- dep(X,Z), depend(Z,Y).
% conflict(X,Y) holds if X and Y depend
on two packages which conflict, conflict between two
packages should be a symmetric relation.
% my poor attempt
conflict(X,Y):- depend(X,A), depend(Y,B), (confl(A,B) | confl(B,A)).
答
我认为你的做法是差不多吧:
dep(gnome1,libc7).
dep(gnome1,gcc7).
dep(gnome2,gnome1).
dep(gnome2,gcc8).
confl(gcc7,gcc8).
% recursive chain dependency
depend(X,Y):- dep(X,Y).
depend(X,Y):- dep(X,Z), depend(Z,Y).
% conflict(X,Y) holds if X and Y depend
% on two packages which conflict, conflict between two
% packages should be a symmetric relation.
conflict(X,Y) :-
depend(X,A), depend(Y,B),
X @< Y, % break symmetry
(confl(A,B) ; confl(B,A)).
我平添了几分(MIS)configuratoin的测试:
11 ?- conflict(X,Y).
X = gnome1,
Y = gnome2 ;
false.
嗯...我得到这个输出? - 冲突(swiprolog330,Y)。 Y = xmoose79; Y = xmoose79; Y = xmoose79; 错误。 – Ciphor 2013-03-10 22:02:03
我应该得到7个不同的结果:/ – Ciphor 2013-03-10 22:02:31
请发布您的数据以获得一些额外的帮助 – CapelliC 2013-03-10 23:02:46