Ich verstehe nicht, warum mein Prädikat nicht zurückgeht und alle Lösungen findet.Warum wird mein Prädikat nicht zurückverfolgt?
person(john).
person(erik).
allExceptSpider(person(Spider),T):-
setof(person(X),person(X),S),
subtract(S,[person(Spider) ],T).
Wenn ich dieses Prädikat mit zwei Variablen nennen:
allExceptSpider(person(Z),Q)
Dann wird es nur geben Sie mir die Antwort Z = john, Q = [person (erik)] aber es wird nicht Rückzieher zu finden Z = erik, Q = [Person (John)] warum?
Wegen subtrahieren/3 Unterschrift: +, +, -. Das zweite Argument sollte begründet sein. – CapelliC
@ CapelliC. Mode-Spezifikationen sind schlampig. cf https://sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/Mode-Spec.html. IIRC "++" wird von einigen Prozessoren verwendet, um anzuzeigen, dass "geschliffen" werden sollte. – repeat