- <Test products of finite domains>=
declare [Dom] = {Module.link ['domain.ozf']}
declare 'export'(make:MakeDomain
product:Product ...) = Dom
declare DomainSpec = [sg pl]
declare Domain = {MakeDomain DomainSpec}
declare I = {Domain.toIndex sg} {Inspect I}
declare E = {Domain.toElement 0} {Inspect E}
declare DomainSpecs = [[sg pl] [1 2 3] [masc fem]]
declare Domains = {Map DomainSpecs MakeDomain}
declare Domain = {Product Domains}
for V in [[sg 1 masc]
[pl 1 masc]
[sg 2 masc]
[pl 2 masc]
[sg 3 masc]
[pl 3 masc]
[sg 1 fem]
[pl 1 fem]
[sg 2 fem]
[pl 2 fem]
[sg 3 fem]
[pl 3 fem]]
do
{Inspect {Domain.toIndex V}}
end
{Inspect Domains}
for I in 0..11 do
{Inspect {Domain.toElement I}}
end
declare proc{WaitUntilStable} {FD.distribute ff [1]}
end
declare fun{Agree A1 A2}
proc{Constraints As}
FD1 FD2
FD1 :: {Map A1 Domain.toIndex}
FD2 :: {Map A2 Domain.toIndex}
FD1 = FD2
{WaitUntilStable}
Inds = {FD.reflect.dom FD1}
in
As = {Map Inds Domain.toElement}
end
in
{Search.all Constraints 1 _}.1
end
{Inspect 'agreement intersection'}
{Inspect {Agree
[[sg 2 masc] [pl 3 masc] [pl 3 fem]]
[[sg 2 masc] [pl 3 fem] [pl 2 fem]]}}
Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.3.99 (20050412)