<< Prev | - Up - | Next >> |
Description of the predicate
distribute/3
.
solveConstraint.pl
: View Download
The predicate distribute/3
(from solveConstraint.pl
) implements the Distribution Rule (or Choice Rule). It takes a constraint graph as its first argument, picks a node Z
with two incoming dominance edges (from X
and Y
), and applies the Distribution Rule to them. It returns the two constraint graphs that are obtained by adding a dominance edge between X
and Y
in either direction. The predicate fails if the input constraint doesn't contain such a node Z
with two incoming dominance edges.
distribute(usr(Ns,LCs,DCs,BCs),usr(Ns,LCs,[dom(X,Y)|DCs],BCs),usr(Ns,LCs,[dom(Y,X)|DCs],BCs)) :-
member(dom(X,Z),DCs),
member(dom(Y,Z),DCs),
X \== Y.
The two calls of member/2
check that there are in fact two dominance edges dom(X,Z)
and dom(Y,Z)
in the list of dominance edges DCs
of the incoming constraint. By adding X \== Y
, we make sure that X and Y are different nodes. Otherwise, it would be possible to add dominances like dom(X,X)
.
<< Prev | - Up - | Next >> |