[ library(shadow_cons) | Reference Manual | Alphabetic Index ]

# shadow_call(+StoreName, ?Goal)

Invokes a constraint on (the shadow variables of) a shadow constraint store.

StoreName
  The name of a shadow constraint store. This call may be the first reference to this store. It must be an atom.
Goal
  A goal (i.e. a constraint): its variables need not (yet) have shadows in the named store

## Description

A copy of the Goal is made, replacing all the variables by their representatives in the shadow constraint store. This copied goal is then called

### Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

### Fail Conditions

The constraint is inconsistent with those previously imposed on the shadow store

### Resatisfiable

No.

### Exceptions

(4) instantiation fault
  StoreName is uninstantiated
(5) type error
  StoreName is not an atom

## Examples

        Success:
            [eclipse]: X::1..10, shadow_call(fred,X#>2).
            X = X{fd:[1..10], shadow_cons:[fred - ShadowVar{[3..10]}]}
            yes.
            [eclipse]: shadow_call(fred, X#>2),
                       shadow_call(fred, Y #> X),
                       shadow_var(Y, fred, Z).
            X = X{[fred - ShadowVar{[3..9999999]}]}
            Y = Y{[fred - Z{[4..10000000]}]}
            Z = Z{[4..10000000]}
            yes.

        Fail:
            [eclipse]: X::1..10, shadow_call(fred,X#>10).
            no (more) solution.
        Error:
            shadow_call(Var,true).  % Error 4

## See Also

shadow_var / 3