mem a l is true if and only if a is structurally equal (see
module eq) to an element of l.

value memq : 'a -> 'a list -> bool

memq a l is true if and only if a is physically equal (see
module eq) to an element of l.

value except : 'a -> 'a list -> 'a list

except a l returns the list l where the first element
structurally equal to a has been removed.
The list l is returned unchanged if it does not contain a.

value exceptq : 'a -> 'a list -> 'a list

Same as except, with physical equality instead of structural
equality.

value subtract : 'a list -> 'a list -> 'a list

subtract l1 l2 returns the list l1 where all elements
structurally equal to one of the elements of l2
have been removed.

value union : 'a list -> 'a list -> 'a list

union l1 l2 appends before list l2 all the elements of list l1
that are not structurally equal to an element of l2.

value intersect : 'a list -> 'a list -> 'a list

intersect l1 l2 returns the list of the elements of l1 that
are structurally equal to an element of l2.

value index : 'a -> 'a list -> int

index a l returns the position of the first element of list l
that is structurally equal to a. The head of the list has
position 0. Raise Not_found if a is not present in l.

value assoc : 'a -> ('a * 'b) list -> 'b

assoc a l returns the value associated with key a in the list of
pairs l. That is,
assoc a [ ...; (a,b); ...] = b
if (a,b) is the leftmost binding of a in list l.
Raise Not_found if there is no value associated with a in the
list l.

value assq : 'a -> ('a * 'b) list -> 'b

Same as assoc, but use physical equality instead of structural
equality to compare keys.

value mem_assoc : 'a -> ('a * 'b) list -> bool

Same as assoc, but simply return true if a binding exists,
and false if no bindings exist for the given key.