用纯净的方式区分术语的平等和不平等的Pure Prolog程序遭受执行效率低下的影响; 即使所有相关条款都是基础的。 最近的例子就是这个答案 。 所有的答案和所有的失败在这个定义是正确的。 考虑: ?- Es = [E1,E2], occurrences(E, Es, Fs). Es = Fs, Fs = [E, E], E1 = E2, E2 = E ; Es = [E, E2], E1 = E, Fs = [E], dif(E, E2) ; Es = [E1, E], E2 = E, Fs = [E], dif(E, E1) ; Es […]
我有一些麻烦,理解为什么我的代码在序言中做了一些基于我把我的规则的顺序。 这是我的数据库: parent(tom, bob). parent(tom, liz). parent(mary, bob). parent(mary, liz). male(tom). male(bob). female(mary). female(liz). 这里是规则: %difference(X, Y) ==> Predicate to check if two people X and Y are not the same person. difference(X, Y) :- \==(X, Y). father(X, Y) :- male(X), parent(X, Y), difference(X, Y). mother(X, Y) :- female(X), parent(X, Y), difference(X, Y). sibling(X, Y) […]
我面对的问题有点微不足道。 我想在Prolog中使用逻辑,但似乎not/1不是我想要的东西: course(ai). course(pl). course(os). have(X,Y) :- course(X),course(Y),not(X = Y). 我查询: have(X,Y), write(XY), nl , fail. 而我没有得到我想要的结果:(