[mercury-users] Using exceptions without cc_multi
Ralph Becket
rafe at cs.mu.OZ.AU
Wed Aug 27 09:23:47 AEST 2003
api at gmx.de, Tuesday, 26 August 2003:
>
> Hello mercury users!
>
> When using try and throw in mercury, I did not find a way to use a try
> block within an ordinary clause, say, of a predicate with determinism
> declaration semidet instead of cc_multi. So something like
>
> :- module tst_except.
>
> :- implementation.
> :- import_module exception.
>
> :- pred q(string::in,string::out) is semidet.
>
> :- pred p(string,string).
> :- mode p(in, out) is semidet.
> p(A,B) :-
> try(q(A), Result),
> (Result = succeeded(B)
> ;
> Result = exception(E),
> %% handle E
> fail
> ).
What you need in this case is to change
try(q(A), Result)
to
Result = promise_only_solution(try(q(A)))
But make sure that calling promise_only_solution is semantically sound
or the compiler may do some strange things to your program.
promise_only_solution is a Mercury built-in function.
-- Ralph
--------------------------------------------------------------------------
mercury-users mailing list
post: mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe: Address: mercury-users-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------
More information about the users
mailing list