To expand your question in your comments to @ScottHunter,
I think my question is why do my other predicates “Know”, do they have the correct answer, while this and another one do not?
The answer is related to the presence of selection points on the stack. Consider this situation:
reasonably_big(L, X) :- member(X, L), X > 100. ?- reasonably_big([105, 2], X). X = 105 ; false. ?-
Compare this to this:
?- reasonably_big([2, 105], X). X = 105. ?-
In the second case, Prologue “knew” that there were no more solutions; in the first case this is not so. The difference between these two situations is that in the first case, member left the selection point on the stack: there was one more element in the list that he could consider to find another answer. In the second case, the rest of the list was empty, and the SWI-Prolog member is smart enough not to leave the selection point on the stack in this case, so he never asked you if you want another solution.
If you get extraneous selection points, this often indicates a logical error. For example, consider this definition of min :
min(X, Y, X) :- X =< Y. min(X, Y, Y).
This is inferior, because you can always step back and get a different value; to wit:
?- min(3,4, X). X = 3 ; X = 4.
The second solution is wrong. But you can still encounter an unnecessary choice by making the wrong improvement:
min(X, Y, X) :- X =< Y. min(X, Y, Y) :- Y =< X.
See what happens when we try different values:
?- min(4,3,X). X = 3. ?- ?- min(3,4,X). X = 3 ; false. ?-
The first one worked fine, and the second left the selection point on the stack, having the second body. You can fix it with a green cut:
min(X,Y,X) :- X =< Y, !. min(X,Y,Y) :- Y =< X. ?- min(3,4,X). X = 3. ?- ?- min(4,3,X). X = 3. ?-
The abbreviation captures Prolog for a specific solution. It says that after you have done this here, there is no need to use any other solutions for this predicate, because we have found the only thing we want. Understanding how to apply a slice is a complex topic, but eliminating unwanted selection points is an important use.