[mercury-users] Constraints and conditionals in Mercury
Julien Fischer
juliensf at csse.unimelb.edu.au
Mon Apr 14 12:39:36 AEST 2008
On Mon, 14 Apr 2008, Mark Brown wrote:
> On 13-Apr-2008, Peter Schachte <schachte at csse.unimelb.edu.au> wrote:
>> Ralph Becket wrote:
>>> Richard A. O'Keefe, Friday, 11 April 2008:
>>>> 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.
>>>
>>> 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.
>>
>> The problem with that is that the promise could be a lie, and there may be no
>> way for the caller to make it true. I suggested there should be a way for
>> Mercury to force a constraint solver to either satisfy all pending
>> constraints if it ca, fail if it can determine they're unsatisfiable, or
>> throw an exception if it can't do either. The Mercury compiler would then
>> force a decision in negated contexts and anywhere else it has to commit.
>
> For commits, there is the ability to do this using the function trailing
> interface. The callback, when called, is passed a "reason" for the trail
> being unwound. The functions can be called not just on failure, but also
> on exceptions, commits, etc. These functions could be made to check for
> floundering.
>
> (Sorry, due to network problems I can't look up the URL for this.)
It is:
<http://www.mercury.csse.unimelb.edu.au/information/doc-latest/mercury_ref/Delayed-goals-and-floundering.html#Delayed-goals-and-floundering>
Julien.
--------------------------------------------------------------------------
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