[ library(gfd) | Reference Manual | Alphabetic Index ]

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

The number of the elements in Vars that match its corresponding value in Values, Matches, satisfies the relation Matches Rel N.

+Values
  A collection of M integer values
?Vars
  A collection of M (domain) variables or integers
+Rel
  One of the atom: #>, #>=, #<, #=<, #=, #\=
?N
  An integer or (domain) variable (array notation accepted)

## Description

Values and Vars are collections of the same size, and the number of elements in Vars taking on the value given by its corresponding element in Values, Matches, is constrained by the relation:

               Rel N

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

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 implemented by gecode's count() constraint (variant with an IntArgs for Values).

## Examples

    [eclipse 5]: count_matches([1,2,3,4], [A,B,C,D], (#=), N).

    A = A{[-1000000 .. 1000000]}
    B = B{[-1000000 .. 1000000]}
    C = C{[-1000000 .. 1000000]}
    D = D{[-1000000 .. 1000000]}
    N = N{[0 .. 4]}

    [eclipse 6]: L = [A,B,C,D], L :: 4..10, count_matches([1,2,3,4], L, (#=), N).

    L = [A{[4 .. 10]}, B{[4 .. 10]}, C{[4 .. 10]}, D{[4 .. 10]}]
    A = A{[4 .. 10]}
    B = B{[4 .. 10]}
    C = C{[4 .. 10]}
    D = D{[4 .. 10]}
    N = N{[0, 1]}

    [eclipse 15]: count_matches([1,2,3,4], [4,3,2,1], (#=), N).

    N = 0

    [eclipse 16]: count_matches([1,2,3,4], [2,2,3,5],  (#=), N).

    N = 2

    [eclipse 17]:  count_matches([], [], (#=), N).

    N = 0