prologclpr

Order of unknowns in Prolog constraint logic programming (clpr)


I have:

:-use_module(library(clpr)).
comp(X, Y, Z):-
    {X = Y * Z, Y = Z, Y > 0, Z > 0}.

Which with the query:

?-comp(X,3,Z).

Yields:

X = 9.0,
Z = 3.0

as expected. But why doesn't

comp(9,Y,Z).

also give me values for Y and Z? What I get is instead:

{Z>0.0,Y=Z,9-Y*Z=0.0},
{9-Y*Z=0.0},
{9-Y*Z=0.0}

Thanks!


Solution

  • Better with constraints over finite domains using this module:

    :-use_module(library(clpfd)).
    comp(X, Y, Z):-
        X #= Y * Z, Y #= Z, Y #> 0, Z #> 0.
    

    With

    comp(9,Y,Z).
    

    I get:

    Y = Z, Z = 3