
<ConsistencyModule:> among(+Values, ?Vars, +Rel, ?N)

   The number of occurrence (Occ) in Vars of values taken from the set of values specified in Values satisfy  the relation Occ Rel N

Arguments
   +Values             A collection of specifications for integer values
   ?Vars               A collection (a la collection_to_list/2) of (domain) variables or integers
   +Rel                One of the atom: #>, #>=, #<, #=<, #=, #\=
   ?N                  An integer or (domain) variable (array notation accepted)

Type
   library(gfd)

Description
   Constrain the number of occurrences in Vars of values taken from the set of
   values specified in Value to satisfy the constraint defined by Rel:

           Rel N

   Rel can be one of #>, #>=, #<, #=<, #=, #\= (or equivalently,
   >, >=, <, =<, =, \=).

   Values specify the values whose occurrence are counted, and accept
   the same syntax as domain specification, i.e. each item can be a
   a simple element, or a range Lo .. Hi. Each element is either an
   integer, or is a ground expression that evaluates to an integer. 

   This constraint can be embedded in a constraint expression in its
   functional form (without the last argument).

   ConsistencyModule is the optional module specification to give the 
   consistency level for the propagation for this constraint: 
   gfd_gac for domain (generalised arc) consistency. 

   This constraint is known as counts in the global constraint catalog,
   with among and among_vars being the specialised form with #= as 
   the Rel (i.e. The number of occurrences of values from Values is
   exactly N), the name among is used here to better distinguish this
   constraint from count/4, for counting the occurrences of a single value.
   This constraint is implemented by gecode's count() constraint (the variant
   with an IntSet argument for Values).



Modules
   This predicate is sensitive to its module context (tool predicate, see @/2).

Examples
   [eclipse 24]: among([1,3,4,9], [4,5,5,4,1,5], (#=), N).

N = 3


[eclipse 25]: among([1..4,9],  [4,5,5,4,1,5], (#=), N).

N = 3


[eclipse 26]:  among([1..4,3,9], [4,5,5,4,1,5], (#=), N). % repeated value

N = 3

[eclipse 2]: among([], [4,5,5,4,1,5], (#=), N).

N = 0

[eclipse 3]: among([1,2,3], [], (#=), N).

N = 0

[eclipse 5]: among([1,3,4,9], [4,5,5,4,1,5], (#\=), N).

N = N{[-1000000 .. 2, 4 .. 1000000]}




