这是一个prolog程序,我想检查linux包之间的依赖关系,以及是否有冲突。
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)配置来测试:
11 ?- conflict(X,Y).
X = gnome1,
Y = gnome2 ;
false.
关于linux - 在Prolog中测试包装冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15325485/