nonmember(+Element, +List)

nonmember(+Element, +List) is true when Element does not occur in the List. For nonmember/2 to instantiate Element in any way would be meaningless, as there are infinitely many terms that do not occur in any given list.

nonmember/2 should only be used when List and Element are sufficiently instantiated that you can tell whether Element occurs in List or not without instantiating any variables. If this requirement is not met, the answers generated may not be exactly what you would expect from the logic.

For example, some valid uses of nonmember/2 are:

     | ?- nonmember(a, [x,y,z]).
     
     yes
     | ?- nonmember(x, [x,y,z]).
     
     no
     

In the following examples, nonmember/2 is invalidly used with insufficiently instantiated arguments. In these cases it simply fails.

     | ?- nonmember(X, [x,y,z]).
     
     no
     | ?- nonmember(x, [X]).
     
     no
     | ?- nonmember(x, X).
     
     no
     

Use nonmember/2 to check whether a known element occurs in a known list, in preference to \+ member/2 or \+ memberchk/2.