[ 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