
delayed_goals_number(?Var, ?Number)

   Succeeds if Number is the number of goals delayed by the variable Var.



Arguments
   ?Var                Any term.
   ?Number             Integer or a variable.

Type
   Advanced Control and Suspensions

Description
   Unifies Number with the number of goals delayed by the variable Var.  If
   Var is instantiated, Number is unified with 1000000.  If Var is not
   instantiated and there are no goals delayed by it, Number is unified
   with 0.  This predicate does not construct the list of delayed goals and
   hence it is faster than delayed_goals/2.  Its purpose is to give each
   variable a weight corresponding to the number of constraints imposed on
   the variable to be able to select the most constrained one.  It is
   assumed that one million constraints cannot be placed on any variable.




Resatisfiable
      No.

Fail Conditions
      Fails if Number does not unify with the above described number.



Examples
   
Success:
    % Make an intelligent permutation choosing
    % the most constrained variable.
    perm([], []).
    perm([Var|List], Values) :-
        delayed_goals_number(Var, C),
        maxval(List, Var, C, Chosen, RestVar),
        delete(Chosen, Values, RestVal),
        perm(RestVar, RestVal).

    maxval(L, Chosen, 1000000, Chosen, L) :- !.
    maxval([], Chosen, _, Chosen, []).
    maxval([X|L], SoFar, MaxVal, Chosen, [V|Rest]) :-
        delayed_goals_number(X, C),
        (C =< MaxVal -> V = X, Next = SoFar, Max = MaxVal ;
            V = SoFar, Next = X, Max = C),
        maxval(L, Next, Max, Chosen, Rest).
    % the values are generated in the listed order
    [eclipse]: perm([A, B, C], [1,2,3]).

    A = 1
    B = 2
    C = 3     More? (;)
    yes.

    % B is more constrained than the others, and so
    % its value will be generated first.
    [eclipse]: B < 3, perm([A, B, C], [1,2,3]).

    A = 2
    B = 1
    C = 3     More? (;)

Fail:
    X > 0, delayed_goals_number(X, 0).





See Also
   delayed_goals / 1, delayed_goals / 2, subcall / 2
