Why is my predicate not backtracking?
问题 I don't understand why my predicate doesnt backtrack and find all solutions. person(john). person(erik). allExceptSpider(person(Spider),T ):- setof(person(X),person(X),S), subtract(S,[person(Spider) ],T). If I call this predicate with Two variables: allExceptSpider(person(Z),Q) Then it will only give me the answer Z = john, Q = [person(erik)] but it won't backtrack to find Z = erik ,Q = [person(john)] why? 回答1: TL;DR: If you use subtract/3 , your code may lose logical-purity. person(john).