[mercury-users] Constraints and conditionals in Mercury

Ralph Becket rafe at csse.unimelb.edu.au
Fri Apr 11 14:00:15 AEST 2008


Richard A. O'Keefe, Friday, 11 April 2008:
> I should clarify that the concern was specifically with if-then-else
> tests where the solver variables are entirely local to the test and
> do not appear in the call, so would not be visible in the type or
> mode of the predicate itself.

Ah, I understand.

> It seems possible from Ralph Beckett's
> reply (saying that "inst 'any' in the condition is noticed) that
> Mercury might *not* notice this.
> 
> Here's an example.
> 
> knights_tour/1 has one argument, an integer.  It is known to be ground.
> There is a conditional
> 
> 	if knights_tour(N) then ... else ...
> 
> The implementation of knights_tour/1 uses constraints *internally* to
> determine whether there exists at least one knight's tour on an NxN
> board or not.  Suppose that knights_tour(N) leaves some constraints
> pending when it exits, and that for some value of N those constraints
> are not satisfiable.  (Perhaps the programmer got it wrong.)
> 
> What happens?
> If it's not yet satisfactory, what _will_ happen?

Right now: we don't catch this situation.  We have discussed the
problem, however.  One suggestion was to look out for cases where
a solver variable goes out of scope without having become ground
and require some kind of promise of good behaviour from the programmer.
This is definitely an awkward one.
--------------------------------------------------------------------------
mercury-users mailing list
Post messages to:       mercury-users at csse.unimelb.edu.au
Administrative Queries: owner-mercury-users at csse.unimelb.edu.au
Subscriptions:          mercury-users-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the users mailing list