# Identity lists

**Author(s):**Francisco Bueno.

The operations in this module handle lists by performing equality checks via identity instead of unification.

## Usage and interface

**Library usage:**`:- use_module(library(idlists)).`**Exports:***Predicates:*`member_0/2`,`memberchk/2`,`list_insert/2`,`add_after/4`,`add_before/4`,`delete/3`,`subtract/3`,`union_idlists/3`.

**Imports:***Packages:*`prelude`,`nonpure`,`assertions`,`isomodes`.

## Documentation on exports

**Usage:**`list_insert(List,Term)`

Adds Term to the end of (tail-opened) List if there is not an element in List identical to Term.

*The following properties should hold at call time:*

(term_typing:var/1)List is a free variable.

(term_typing:nonvar/1)Term is currently a term which is not a free variable.

**Usage:**`add_after(L0,E0,E,L)`

Adds element E after the first element identical to E0 (or at end) of list L0, returning in L the new list.

*The following properties should hold at call time:*

(term_typing:nonvar/1)L0 is currently a term which is not a free variable.

(term_typing:nonvar/1)E0 is currently a term which is not a free variable.

(term_typing:nonvar/1)E is currently a term which is not a free variable.

(term_typing:var/1)L is a free variable.

**Usage:**`add_before(L0,E0,E,L)`

Adds element E before the first element identical to E0 (or at start) of list L0, returning in L the new list.

*The following properties should hold at call time:*

(term_typing:nonvar/1)L0 is currently a term which is not a free variable.

(term_typing:nonvar/1)E0 is currently a term which is not a free variable.

(term_typing:nonvar/1)E is currently a term which is not a free variable.

(term_typing:var/1)L is a free variable.

**Usage:**`delete(List,Element,Rest)`

Rest has the same elements of List except for all the occurrences of elements identical to Element.

*The following properties should hold at call time:*

(term_typing:nonvar/1)List is currently a term which is not a free variable.

(term_typing:nonvar/1)Element is currently a term which is not a free variable.

(term_typing:var/1)Rest is a free variable.

**Usage:**`subtract(Set,Set0,Difference)`

Difference has the same elements of Set except those which have an identical occurrence in Set0.

*The following properties should hold at call time:*

(term_typing:nonvar/1)Set is currently a term which is not a free variable.

(term_typing:nonvar/1)Set0 is currently a term which is not a free variable.

(term_typing:var/1)Difference is a free variable.

**Usage:**`union_idlists(List1,List2,List)`

List has the elements which are in List1 but are not identical to an element in List2 followed by the elements in List2.

*The following properties should hold at call time:*

(term_typing:nonvar/1)List1 is currently a term which is not a free variable.

(term_typing:nonvar/1)List2 is currently a term which is not a free variable.

(term_typing:var/1)List is a free variable.