Provided by: erlang-manpages_25.3.2.8+dfsg-1ubuntu4_all bug

NAME

       lists - List processing functions.

DESCRIPTION

       This module contains functions for list processing.

       Unless  otherwise  stated,  all  functions assume that position numbering starts at 1. That is, the first
       element of a list is at position 1.

       Two terms T1 and T2 compare equal if T1 == T2 evaluates to true. They match if T1  =:=  T2  evaluates  to
       true.

       Whenever an ordering function F is expected as argument, it is assumed that the following properties hold
       of F for all x, y, and z:

         * If x F y and y F x, then x = y (F is antisymmetric).

         * If x F y and y F z, then x F z (F is transitive).

         * x F y or y F x (F is total).

       An example of a typical ordering function is less than or equal to: =</2.

EXPORTS

       all(Pred, List) -> boolean()

              Types:

                 Pred = fun((Elem :: T) -> boolean())
                 List = [T]
                 T = term()

              Returns true if Pred(Elem) returns true for all elements Elem in List, otherwise false.  The  Pred
              function must return a boolean.

       any(Pred, List) -> boolean()

              Types:

                 Pred = fun((Elem :: T) -> boolean())
                 List = [T]
                 T = term()

              Returns  true  if Pred(Elem) returns true for at least one element Elem in List. The Pred function
              must return a boolean.

       append(ListOfLists) -> List1

              Types:

                 ListOfLists = [List]
                 List = List1 = [T]
                 T = term()

              Returns a list in which all the sublists of ListOfLists have been appended.

              Example:

              > lists:append([[1, 2, 3], [a, b], [4, 5, 6]]).
              [1,2,3,a,b,4,5,6]

       append(List1, List2) -> List3

              Types:

                 List1 = List2 = List3 = [T]
                 T = term()

              Returns a new list List3, which is made from the elements of List1 followed  by  the  elements  of
              List2.

              Example:

              > lists:append("abc", "def").
              "abcdef"

              lists:append(A, B) is equivalent to A ++ B.

       concat(Things) -> string()

              Types:

                 Things = [Thing]
                 Thing = atom() | integer() | float() | string()

              Concatenates  the  text  representation  of  the elements of Things. The elements of Things can be
              atoms, integers, floats, or strings.

              Example:

              > lists:concat([doc, '/', file, '.', 3]).
              "doc/file.3"

       delete(Elem, List1) -> List2

              Types:

                 Elem = T
                 List1 = List2 = [T]
                 T = term()

              Returns a copy of List1 where the first element matching Elem is deleted,  if  there  is  such  an
              element.

       droplast(List) -> InitList

              Types:

                 List = [T, ...]
                 InitList = [T]
                 T = term()

              Drops the last element of a List. The list is to be non-empty, otherwise the function crashes with
              a function_clause.

       dropwhile(Pred, List1) -> List2

              Types:

                 Pred = fun((Elem :: T) -> boolean())
                 List1 = List2 = [T]
                 T = term()

              Drops elements Elem from List1 while Pred(Elem) returns true and returns the remaining  list.  The
              Pred function must return a boolean.

       duplicate(N, Elem) -> List

              Types:

                 N = integer() >= 0
                 Elem = T
                 List = [T]
                 T = term()

              Returns a list containing N copies of term Elem.

              Example:

              > lists:duplicate(5, xx).
              [xx,xx,xx,xx,xx]

       enumerate(List1) -> List2

              Types:

                 List1 = [T]
                 List2 = [{Index, T}]
                 Index = integer()
                 T = term()

              Returns  List1 with each element H replaced by a tuple of form {I, H} where I is the position of H
              in List1. The enumeration starts with 1 and increases by 1 in each step.

              That is, enumerate/1 behaves as if it had been defined as follows:

              enumerate(List) ->
                {List1, _ } = lists:mapfoldl(fun(T, Acc) -> {{Acc, T}, Acc+1} end, 1, List),
                List1.

              Example:

              > lists:enumerate([a,b,c]).
              [{1,a},{2,b},{3,c}]

       enumerate(Index, List1) -> List2

              Types:

                 List1 = [T]
                 List2 = [{Index, T}]
                 Index = integer()
                 T = term()

              Returns List1 with each element H replaced by a tuple of form {I, H} where I is the position of  H
              in List1. The enumeration starts with Index and increases by 1 in each step.

              That is, enumerate/2 behaves as if it had been defined as follows:

              enumerate(I, List) ->
                {List1, _ } = lists:mapfoldl(fun(T, Acc) -> {{Acc, T}, Acc+1} end, I, List),
                List1.

              Example:

              > lists:enumerate(10, [a,b,c]).
              [{10,a},{11,b},{12,c}]

       filter(Pred, List1) -> List2

              Types:

                 Pred = fun((Elem :: T) -> boolean())
                 List1 = List2 = [T]
                 T = term()

              List2 is a list of all elements Elem in List1 for which Pred(Elem) returns true. The Pred function
              must return a boolean.

       filtermap(Fun, List1) -> List2

              Types:

                 Fun = fun((Elem) -> boolean() | {true, Value})
                 List1 = [Elem]
                 List2 = [Elem | Value]
                 Elem = Value = term()

              Calls Fun(Elem) on successive elements Elem of List1. Fun/1 must return  either  a  Boolean  or  a
              tuple  {true, Value}. The function returns the list of elements for which Fun returns a new value,
              where a value of true is synonymous with {true, Elem}.

              That is, filtermap behaves as if it had been defined as follows:

              filtermap(Fun, List1) ->
                  lists:foldr(fun(Elem, Acc) ->
                                     case Fun(Elem) of
                                         false -> Acc;
                                         true -> [Elem|Acc];
                                         {true,Value} -> [Value|Acc]
                                     end
                              end, [], List1).

              Example:

              > lists:filtermap(fun(X) -> case X rem 2 of 0 -> {true, X div 2}; _ -> false end end, [1,2,3,4,5]).
              [1,2]

       flatlength(DeepList) -> integer() >= 0

              Types:

                 DeepList = [term() | DeepList]

              Equivalent to length(flatten(DeepList)), but more efficient.

       flatmap(Fun, List1) -> List2

              Types:

                 Fun = fun((A) -> [B])
                 List1 = [A]
                 List2 = [B]
                 A = B = term()

              Takes a function from As to lists of Bs, and a list of As (List1) and produces a  list  of  Bs  by
              applying the function to every element in List1 and appending the resulting lists.

              That is, flatmap behaves as if it had been defined as follows:

              flatmap(Fun, List1) ->
                  append(map(Fun, List1)).

              Example:

              > lists:flatmap(fun(X)->[X,X] end, [a,b,c]).
              [a,a,b,b,c,c]

       flatten(DeepList) -> List

              Types:

                 DeepList = [term() | DeepList]
                 List = [term()]

              Returns a flattened version of DeepList.

       flatten(DeepList, Tail) -> List

              Types:

                 DeepList = [term() | DeepList]
                 Tail = List = [term()]

              Returns a flattened version of DeepList with tail Tail appended.

       foldl(Fun, Acc0, List) -> Acc1

              Types:

                 Fun = fun((Elem :: T, AccIn) -> AccOut)
                 Acc0 = Acc1 = AccIn = AccOut = term()
                 List = [T]
                 T = term()

              Calls  Fun(Elem,  AccIn) on successive elements A of List, starting with AccIn == Acc0. Fun/2 must
              return a new accumulator, which is passed to the next call. The function returns the  final  value
              of the accumulator. Acc0 is returned if the list is empty.

              Example:

              > lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).
              15
              > lists:foldl(fun(X, Prod) -> X * Prod end, 1, [1,2,3,4,5]).
              120

       foldr(Fun, Acc0, List) -> Acc1

              Types:

                 Fun = fun((Elem :: T, AccIn) -> AccOut)
                 Acc0 = Acc1 = AccIn = AccOut = term()
                 List = [T]
                 T = term()

              Like foldl/3, but the list is traversed from right to left.

              Example:

              > P = fun(A, AccIn) -> io:format("~p ", [A]), AccIn end.
              #Fun<erl_eval.12.2225172>
              > lists:foldl(P, void, [1,2,3]).
              1 2 3 void
              > lists:foldr(P, void, [1,2,3]).
              3 2 1 void

              foldl/3 is tail recursive and is usually preferred to foldr/3.

       join(Sep, List1) -> List2

              Types:

                 Sep = T
                 List1 = List2 = [T]
                 T = term()

              Inserts  Sep  between  each  element  in List1. Has no effect on the empty list and on a singleton
              list. For example:

              > lists:join(x, [a,b,c]).
              [a,x,b,x,c]
              > lists:join(x, [a]).
              [a]
              > lists:join(x, []).
              []

       foreach(Fun, List) -> ok

              Types:

                 Fun = fun((Elem :: T) -> term())
                 List = [T]
                 T = term()

              Calls Fun(Elem) for each element Elem in List. This function is used for its side effects and  the
              evaluation order is defined to be the same as the order of the elements in the list.

       keydelete(Key, N, TupleList1) -> TupleList2

              Types:

                 Key = term()
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = TupleList2 = [Tuple]
                 Tuple = tuple()

              Returns  a  copy  of  TupleList1  where the first occurrence of a tuple whose Nth element compares
              equal to Key is deleted, if there is such a tuple.

       keyfind(Key, N, TupleList) -> Tuple | false

              Types:

                 Key = term()
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList = [Tuple]
                 Tuple = tuple()

              Searches the list of tuples TupleList for a tuple whose Nth element compares equal to Key. Returns
              Tuple if such a tuple is found, otherwise false.

       keymap(Fun, N, TupleList1) -> TupleList2

              Types:

                 Fun = fun((Term1 :: term()) -> Term2 :: term())
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = TupleList2 = [Tuple]
                 Tuple = tuple()

              Returns  a  list of tuples where, for each tuple in TupleList1, the Nth element Term1 of the tuple
              has been replaced with the result of calling Fun(Term1).

              Examples:

              > Fun = fun(Atom) -> atom_to_list(Atom) end.
              #Fun<erl_eval.6.10732646>
              2> lists:keymap(Fun, 2, [{name,jane,22},{name,lizzie,20},{name,lydia,15}]).
              [{name,"jane",22},{name,"lizzie",20},{name,"lydia",15}]

       keymember(Key, N, TupleList) -> boolean()

              Types:

                 Key = term()
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList = [Tuple]
                 Tuple = tuple()

              Returns true if there is a tuple in TupleList whose Nth element compares equal to  Key,  otherwise
              false.

       keymerge(N, TupleList1, TupleList2) -> TupleList3

              Types:

                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = [T1]
                 TupleList2 = [T2]
                 TupleList3 = [T1 | T2]
                 T1 = T2 = Tuple
                 Tuple = tuple()

              Returns the sorted list formed by merging TupleList1 and TupleList2. The merge is performed on the
              Nth element of each tuple. Both TupleList1 and TupleList2 must  be  key-sorted  before  evaluating
              this function. When two tuples compare equal, the tuple from TupleList1 is picked before the tuple
              from TupleList2.

       keyreplace(Key, N, TupleList1, NewTuple) -> TupleList2

              Types:

                 Key = term()
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = TupleList2 = [Tuple]
                 NewTuple = Tuple
                 Tuple = tuple()

              Returns a copy of TupleList1 where the first occurrence of a T tuple whose  Nth  element  compares
              equal to Key is replaced with NewTuple, if there is such a tuple T.

       keysearch(Key, N, TupleList) -> {value, Tuple} | false

              Types:

                 Key = term()
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList = [Tuple]
                 Tuple = tuple()

              Searches the list of tuples TupleList for a tuple whose Nth element compares equal to Key. Returns
              {value, Tuple} if such a tuple is found, otherwise false.

          Note:
              This function  is  retained  for  backward  compatibility.  Function  keyfind/3  is  usually  more
              convenient.

       keysort(N, TupleList1) -> TupleList2

              Types:

                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = TupleList2 = [Tuple]
                 Tuple = tuple()

              Returns  a list containing the sorted elements of list TupleList1. Sorting is performed on the Nth
              element of the tuples. The sort is stable.

       keystore(Key, N, TupleList1, NewTuple) -> TupleList2

              Types:

                 Key = term()
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = [Tuple]
                 TupleList2 = [Tuple, ...]
                 NewTuple = Tuple
                 Tuple = tuple()

              Returns a copy of TupleList1 where the first occurrence of a tuple T whose  Nth  element  compares
              equal to Key is replaced with NewTuple, if there is such a tuple T. If there is no such tuple T, a
              copy of TupleList1 where [NewTuple] has been appended to the end is returned.

       keytake(Key, N, TupleList1) -> {value, Tuple, TupleList2} | false

              Types:

                 Key = term()
                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = TupleList2 = [tuple()]
                 Tuple = tuple()

              Searches the list of tuples TupleList1 for a tuple  whose  Nth  element  compares  equal  to  Key.
              Returns {value, Tuple, TupleList2} if such a tuple is found, otherwise false. TupleList2 is a copy
              of TupleList1 where the first occurrence of Tuple has been removed.

       last(List) -> Last

              Types:

                 List = [T, ...]
                 Last = T
                 T = term()

              Returns the last element in List.

       map(Fun, List1) -> List2

              Types:

                 Fun = fun((A) -> B)
                 List1 = [A]
                 List2 = [B]
                 A = B = term()

              Takes a function from As to Bs, and a list of As and  produces  a  list  of  Bs  by  applying  the
              function  to  every  element  in  the list. This function is used to obtain the return values. The
              evaluation order depends on the implementation.

       mapfoldl(Fun, Acc0, List1) -> {List2, Acc1}

              Types:

                 Fun = fun((A, AccIn) -> {B, AccOut})
                 Acc0 = Acc1 = AccIn = AccOut = term()
                 List1 = [A]
                 List2 = [B]
                 A = B = term()

              Combines the operations of map/2 and foldl/3 into one pass.

              Example:

              Summing the elements in a list and double them at the same time:

              > lists:mapfoldl(fun(X, Sum) -> {2*X, X+Sum} end,
              0, [1,2,3,4,5]).
              {[2,4,6,8,10],15}

       mapfoldr(Fun, Acc0, List1) -> {List2, Acc1}

              Types:

                 Fun = fun((A, AccIn) -> {B, AccOut})
                 Acc0 = Acc1 = AccIn = AccOut = term()
                 List1 = [A]
                 List2 = [B]
                 A = B = term()

              Combines the operations of map/2 and foldr/3 into one pass.

       max(List) -> Max

              Types:

                 List = [T, ...]
                 Max = T
                 T = term()

              Returns the first element of List that compares greater than or equal to  all  other  elements  of
              List.

       member(Elem, List) -> boolean()

              Types:

                 Elem = T
                 List = [T]
                 T = term()

              Returns true if Elem matches some element of List, otherwise false.

       merge(ListOfLists) -> List1

              Types:

                 ListOfLists = [List]
                 List = List1 = [T]
                 T = term()

              Returns  the  sorted  list formed by merging all the sublists of ListOfLists. All sublists must be
              sorted before evaluating this function. When two elements compare  equal,  the  element  from  the
              sublist with the lowest position in ListOfLists is picked before the other element.

       merge(List1, List2) -> List3

              Types:

                 List1 = [X]
                 List2 = [Y]
                 List3 = [X | Y]
                 X = Y = term()

              Returns  the  sorted  list  formed by merging List1 and List2. Both List1 and List2 must be sorted
              before evaluating this function. When two elements compare equal, the element from List1 is picked
              before the element from List2.

       merge(Fun, List1, List2) -> List3

              Types:

                 Fun = fun((A, B) -> boolean())
                 List1 = [A]
                 List2 = [B]
                 List3 = [A | B]
                 A = B = term()

              Returns  the  sorted  list  formed by merging List1 and List2. Both List1 and List2 must be sorted
              according to the ordering function Fun before evaluating this function. Fun(A,  B)  is  to  return
              true  if  A  compares  less than or equal to B in the ordering, otherwise false. When two elements
              compare equal, the element from List1 is picked before the element from List2.

       merge3(List1, List2, List3) -> List4

              Types:

                 List1 = [X]
                 List2 = [Y]
                 List3 = [Z]
                 List4 = [X | Y | Z]
                 X = Y = Z = term()

              Returns the sorted list formed by merging List1, List2, and List3. All of List1, List2, and  List3
              must  be sorted before evaluating this function. When two elements compare equal, the element from
              List1, if there is such an element, is picked before the other element, otherwise the element from
              List2 is picked before the element from List3.

       min(List) -> Min

              Types:

                 List = [T, ...]
                 Min = T
                 T = term()

              Returns the first element of List that compares less than or equal to all other elements of List.

       nth(N, List) -> Elem

              Types:

                 N = integer() >= 1
                   1..length(List)
                 List = [T, ...]
                 Elem = T
                 T = term()

              Returns the Nth element of List.

              Example:

              > lists:nth(3, [a, b, c, d, e]).
              c

       nthtail(N, List) -> Tail

              Types:

                 N = integer() >= 0
                   0..length(List)
                 List = [T, ...]
                 Tail = [T]
                 T = term()

              Returns  the  Nth  tail of List, that is, the sublist of List starting at N+1 and continuing up to
              the end of the list.

              Example

              > lists:nthtail(3, [a, b, c, d, e]).
              [d,e]
              > tl(tl(tl([a, b, c, d, e]))).
              [d,e]
              > lists:nthtail(0, [a, b, c, d, e]).
              [a,b,c,d,e]
              > lists:nthtail(5, [a, b, c, d, e]).
              []

       partition(Pred, List) -> {Satisfying, NotSatisfying}

              Types:

                 Pred = fun((Elem :: T) -> boolean())
                 List = Satisfying = NotSatisfying = [T]
                 T = term()

              Partitions List into two lists, where the first list contains all elements  for  which  Pred(Elem)
              returns true, and the second list contains all elements for which Pred(Elem) returns false.

              Examples:

              > lists:partition(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).
              {[1,3,5,7],[2,4,6]}
              > lists:partition(fun(A) -> is_atom(A) end, [a,b,1,c,d,2,3,4,e]).
              {[a,b,c,d,e],[1,2,3,4]}

              For a different way to partition a list, see splitwith/2.

       prefix(List1, List2) -> boolean()

              Types:

                 List1 = List2 = [T]
                 T = term()

              Returns true if List1 is a prefix of List2, otherwise false.

       reverse(List1) -> List2

              Types:

                 List1 = List2 = [T]
                 T = term()

              Returns a list with the elements in List1 in reverse order.

       reverse(List1, Tail) -> List2

              Types:

                 List1 = [T]
                 Tail = term()
                 List2 = [T]
                 T = term()

              Returns a list with the elements in List1 in reverse order, with tail Tail appended.

              Example:

              > lists:reverse([1, 2, 3, 4], [a, b, c]).
              [4,3,2,1,a,b,c]

       search(Pred, List) -> {value, Value} | false

              Types:

                 Pred = fun((T) -> boolean())
                 List = [T]
                 Value = T

              If  there  is  a  Value in List such that Pred(Value) returns true, returns {value, Value} for the
              first such Value, otherwise returns false. The Pred function must return a boolean.

       seq(From, To) -> Seq

       seq(From, To, Incr) -> Seq

              Types:

                 From = To = Incr = integer()
                 Seq = [integer()]

              Returns a sequence of integers that starts with From and contains the successive results of adding
              Incr  to  the  previous  element,  until To is reached or passed (in the latter case, To is not an
              element of the sequence). Incr defaults to 1.

              Failures:

                * If To < From - Incr and Incr > 0.

                * If To > From - Incr and Incr < 0.

                * If Incr =:= 0 and From =/= To.

              The following equalities hold for all sequences:

              length(lists:seq(From, To)) =:= To - From + 1
              length(lists:seq(From, To, Incr)) =:= (To - From + Incr) div Incr

              Examples:

              > lists:seq(1, 10).
              [1,2,3,4,5,6,7,8,9,10]
              > lists:seq(1, 20, 3).
              [1,4,7,10,13,16,19]
              > lists:seq(1, 0, 1).
              []
              > lists:seq(10, 6, 4).
              []
              > lists:seq(1, 1, 0).
              [1]

       sort(List1) -> List2

              Types:

                 List1 = List2 = [T]
                 T = term()

              Returns a list containing the sorted elements of List1.

       sort(Fun, List1) -> List2

              Types:

                 Fun = fun((A :: T, B :: T) -> boolean())
                 List1 = List2 = [T]
                 T = term()

              Returns a list containing the sorted elements of List1, according to the  ordering  function  Fun.
              Fun(A,  B)  is  to  return  true  if A compares less than or equal to B in the ordering, otherwise
              false.

       split(N, List1) -> {List2, List3}

              Types:

                 N = integer() >= 0
                   0..length(List1)
                 List1 = List2 = List3 = [T]
                 T = term()

              Splits List1 into List2 and List3. List2 contains the first N elements  and  List3  the  remaining
              elements (the Nth tail).

       splitwith(Pred, List) -> {List1, List2}

              Types:

                 Pred = fun((T) -> boolean())
                 List = List1 = List2 = [T]
                 T = term()

              Partitions  List  into  two  lists  according  to Pred. splitwith/2 behaves as if it is defined as
              follows:

              splitwith(Pred, List) ->
                  {takewhile(Pred, List), dropwhile(Pred, List)}.

              Examples:

              > lists:splitwith(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).
              {[1],[2,3,4,5,6,7]}
              > lists:splitwith(fun(A) -> is_atom(A) end, [a,b,1,c,d,2,3,4,e]).
              {[a,b],[1,c,d,2,3,4,e]}

              The Pred function must return a boolean. For a different way to partition a list, see partition/2.

       sublist(List1, Len) -> List2

              Types:

                 List1 = List2 = [T]
                 Len = integer() >= 0
                 T = term()

              Returns the sublist of List1 starting at position 1 and with (maximum) Len elements. It is not  an
              error for Len to exceed the length of the list, in that case the whole list is returned.

       sublist(List1, Start, Len) -> List2

              Types:

                 List1 = List2 = [T]
                 Start = integer() >= 1
                   1..(length(List1)+1)
                 Len = integer() >= 0
                 T = term()

              Returns the sublist of List1 starting at Start and with (maximum) Len elements. It is not an error
              for Start+Len to exceed the length of the list.

              Examples:

              > lists:sublist([1,2,3,4], 2, 2).
              [2,3]
              > lists:sublist([1,2,3,4], 2, 5).
              [2,3,4]
              > lists:sublist([1,2,3,4], 5, 2).
              []

       subtract(List1, List2) -> List3

              Types:

                 List1 = List2 = List3 = [T]
                 T = term()

              Returns a new list List3 that is a copy of List1, subjected to the following procedure:  for  each
              element in List2, its first occurrence in List1 is deleted.

              Example:

              > lists:subtract("123212", "212").
              "312".

              lists:subtract(A, B) is equivalent to A -- B.

       suffix(List1, List2) -> boolean()

              Types:

                 List1 = List2 = [T]
                 T = term()

              Returns true if List1 is a suffix of List2, otherwise false.

       sum(List) -> number()

              Types:

                 List = [number()]

              Returns the sum of the elements in List.

       takewhile(Pred, List1) -> List2

              Types:

                 Pred = fun((Elem :: T) -> boolean())
                 List1 = List2 = [T]
                 T = term()

              Takes  elements  Elem  from List1 while Pred(Elem) returns true, that is, the function returns the
              longest prefix of the list for which all elements satisfy the predicate. The  Pred  function  must
              return a boolean.

       ukeymerge(N, TupleList1, TupleList2) -> TupleList3

              Types:

                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = [T1]
                 TupleList2 = [T2]
                 TupleList3 = [T1 | T2]
                 T1 = T2 = Tuple
                 Tuple = tuple()

              Returns the sorted list formed by merging TupleList1 and TupleList2. The merge is performed on the
              Nth element of each tuple. Both TupleList1 and TupleList2 must be  key-sorted  without  duplicates
              before  evaluating  this  function.  When  two  tuples compare equal, the tuple from TupleList1 is
              picked and the one from TupleList2 is deleted.

       ukeysort(N, TupleList1) -> TupleList2

              Types:

                 N = integer() >= 1
                   1..tuple_size(Tuple)
                 TupleList1 = TupleList2 = [Tuple]
                 Tuple = tuple()

              Returns a list containing the sorted elements of list TupleList1 where all except the first  tuple
              of  the  tuples  comparing equal have been deleted. Sorting is performed on the Nth element of the
              tuples.

       umerge(ListOfLists) -> List1

              Types:

                 ListOfLists = [List]
                 List = List1 = [T]
                 T = term()

              Returns the sorted list formed by merging all the sublists of ListOfLists. All  sublists  must  be
              sorted and contain no duplicates before evaluating this function. When two elements compare equal,
              the element from the sublist with the lowest position in ListOfLists is picked and  the  other  is
              deleted.

       umerge(List1, List2) -> List3

              Types:

                 List1 = [X]
                 List2 = [Y]
                 List3 = [X | Y]
                 X = Y = term()

              Returns the sorted list formed by merging List1 and List2. Both List1 and List2 must be sorted and
              contain no duplicates before evaluating this  function.  When  two  elements  compare  equal,  the
              element from List1 is picked and the one from List2 is deleted.

       umerge(Fun, List1, List2) -> List3

              Types:

                 Fun = fun((A, B) -> boolean())
                 List1 = [A]
                 List2 = [B]
                 List3 = [A | B]
                 A = B = term()

              Returns  the  sorted  list  formed by merging List1 and List2. Both List1 and List2 must be sorted
              according to the ordering function Fun and contain no duplicates before evaluating this  function.
              Fun(A,  B)  is  to  return  true  if A compares less than or equal to B in the ordering, otherwise
              false. When two elements compare equal, the element from List1 is picked and the one from List2 is
              deleted.

       umerge3(List1, List2, List3) -> List4

              Types:

                 List1 = [X]
                 List2 = [Y]
                 List3 = [Z]
                 List4 = [X | Y | Z]
                 X = Y = Z = term()

              Returns  the sorted list formed by merging List1, List2, and List3. All of List1, List2, and List3
              must be sorted and contain no duplicates  before  evaluating  this  function.  When  two  elements
              compare equal, the element from List1 is picked if there is such an element, otherwise the element
              from List2 is picked, and the other is deleted.

       unzip(List1) -> {List2, List3}

              Types:

                 List1 = [{A, B}]
                 List2 = [A]
                 List3 = [B]
                 A = B = term()

              "Unzips" a list of two-tuples into two lists, where the first list contains the first  element  of
              each tuple, and the second list contains the second element of each tuple.

       unzip3(List1) -> {List2, List3, List4}

              Types:

                 List1 = [{A, B, C}]
                 List2 = [A]
                 List3 = [B]
                 List4 = [C]
                 A = B = C = term()

              "Unzips"  a list of three-tuples into three lists, where the first list contains the first element
              of each tuple, the second list contains the second element of  each  tuple,  and  the  third  list
              contains the third element of each tuple.

       usort(List1) -> List2

              Types:

                 List1 = List2 = [T]
                 T = term()

              Returns  a  list containing the sorted elements of List1 where all except the first element of the
              elements comparing equal have been deleted.

       usort(Fun, List1) -> List2

              Types:

                 Fun = fun((T, T) -> boolean())
                 List1 = List2 = [T]
                 T = term()

              Returns a list containing the sorted elements of List1 where all except the first element  of  the
              elements comparing equal according to the ordering function Fun have been deleted. Fun(A, B) is to
              return true if A compares less than or equal to B in the ordering, otherwise false.

       zip(List1, List2) -> List3

              Types:

                 List1 = [A]
                 List2 = [B]
                 List3 = [{A, B}]
                 A = B = term()

              "Zips" two lists of equal length into one list of two-tuples, where  the  first  element  of  each
              tuple  is taken from the first list and the second element is taken from the corresponding element
              in the second list.

       zip3(List1, List2, List3) -> List4

              Types:

                 List1 = [A]
                 List2 = [B]
                 List3 = [C]
                 List4 = [{A, B, C}]
                 A = B = C = term()

              "Zips" three lists of equal length into one list of three-tuples, where the first element of  each
              tuple  is taken from the first list, the second element is taken from the corresponding element in
              the second list, and the third element is taken from the corresponding element in the third list.

       zipwith(Combine, List1, List2) -> List3

              Types:

                 Combine = fun((X, Y) -> T)
                 List1 = [X]
                 List2 = [Y]
                 List3 = [T]
                 X = Y = T = term()

              Combines the elements of two lists of equal length into one list. For  each  pair  X,  Y  of  list
              elements from the two lists, the element in the result list is Combine(X, Y).

              zipwith(fun(X, Y) -> {X,Y} end, List1, List2) is equivalent to zip(List1, List2).

              Example:

              > lists:zipwith(fun(X, Y) -> X+Y end, [1,2,3], [4,5,6]).
              [5,7,9]

       zipwith3(Combine, List1, List2, List3) -> List4

              Types:

                 Combine = fun((X, Y, Z) -> T)
                 List1 = [X]
                 List2 = [Y]
                 List3 = [Z]
                 List4 = [T]
                 X = Y = Z = T = term()

              Combines  the  elements  of  three lists of equal length into one list. For each triple X, Y, Z of
              list elements from the three lists, the element in the result list is Combine(X, Y, Z).

              zipwith3(fun(X, Y, Z) -> {X,Y,Z} end, List1, List2, List3) is  equivalent  to  zip3(List1,  List2,
              List3).

              Examples:

              > lists:zipwith3(fun(X, Y, Z) -> X+Y+Z end, [1,2,3], [4,5,6], [7,8,9]).
              [12,15,18]
              > lists:zipwith3(fun(X, Y, Z) -> [X,Y,Z] end, [a,b,c], [x,y,z], [1,2,3]).
              [[a,x,1],[b,y,2],[c,z,3]]

       uniq(List1) -> List2

              Types:

                 List1 = List2 = [T]
                 T = term()

              Returns  a  list containing the elements of List1 with duplicated elements removed (preserving the
              order of the elements). The first occurrence of each element is kept.

              Examples:

              > lists:uniq([3,3,1,2,1,2,3]).
              [3,1,2]
              > lists:uniq([a, a, 1, b, 2, a, 3]).
              [a, 1, b, 2, 3]

       uniq(Fun, List1) -> List2

              Types:

                 Fun = fun((T) -> any())
                 List1 = List2 = [T]
                 T = term()

              Returns a list containing the elements of List1  without  the  elements  for  which  Fun  returned
              duplicate  values  (preserving the order of the elements). The first occurrence of each element is
              kept.

              Examples:

              > lists:uniq(fun({X, _}) -> X end, [{b, 2}, {a, 1}, {c, 3}, {a, 2}]).
              [{b, 2}, {a, 1}, {c, 3}]