Internals

## 6.4 Internals

Internally, symbolic domains are mapped to integer ranges from 1 up to the number of domain elements. The first value in the domain declaration corresponds to 1, the second to 2 and so on. Similarly, symbolic domain variables can be mapped to a corresponding IC integer variable. This mapping is accessible through the predicate symbol_domain_index/3:

>     ?- symbol_domain_index(fr, D, I).
>     D = weekday
>     I = 5
>     Yes (0.00s cpu)

>     ?- X &:: weekday, symbol_domain_index(X, D, I).
>     X = X{[mo, tu, we, th, fr, sa, su]}
>     D = weekday
>     I = I{1 .. 7}
>     Yes (0.00s cpu)

>     ?- X &:: weekday, X &\= we, symbol_domain_index(X, D, I).
>     X = X{[mo, tu, th, fr, sa, su]}
>     D = weekday
>     I = I{[1, 2, 4 .. 7]}
>     Yes (0.00s cpu)

The integer variable I mirrors the domain of the symbolic variable X and vice versa.