##### `member(`?Element`, `?List`)`

`member(`?Element`, `?List`)` is true when List is a (possibly partial) list, and Element is one of its elements. It may be used to check whether a particular element occurs in a given list, or to enumerate all of the elements of a list by backtracking. `member/2` may also be used to generate a list.

```     | ?- member(a, [b,e,a,r]).

yes

| ?- member(e, [s,e,e,n]).

yes   /* this will succeed twice */

| ?- member(e, [t,o,l,d]).

no

| ?- member(X-Y, [light-dark,near-far,wet-dry]).

X = light,
Y = dark ;

X = near,
Y = far ;

X = wet,
Y = dry

| ?- member(a-X, [b-2,Y-3,X-Y]).

X = 3,
Y = a ;

X = a,
Y = a

| ?- member(a, L), member(b, L), member(c, L),
|    length(L, N).

L = [a,b,c],
N = 3
```

The last example will generate lists of increasing length whose first three members are `a`, `b`, and `c`.

If L is a proper list of length n, `member(`X```, ```L`)` has at most n solutions, whatever X is. But if L is a partial list, `member/2` will backtrack indefinitely, trying to place X ever farther to the right. For example,

```     | ?- member(a, L).

L = [a|_879] ;

L = [_878,a|_881] ;

L = [_878,_880,a|_883] ;
.
.
.
```

until you stop it.

In general, you should only use `member/2` when the second argument is a proper list. This list need not be ground; however, it must not end with a variable.