[m-dev.] syntax for pre and post conditions

Peter Ross petdr at cs.mu.OZ.AU
Tue Jan 25 16:02:21 AEDT 2000


On 25-Jan-2000, Fergus Henderson <fjh at cs.mu.OZ.AU> wrote:
> 
> Is all that clear?
> 
Yes, and I am convinced that the admissibility should be seperate check.

The only problem that Mark Brown and I came up with is maybe something
like the following could cause problems:

:- pred take(int::in, list(int)::in_list_skel, list(int)::out) is semidet.

:- check admissibility take(N, L, _) => ( N =< length(L) ).

take(N, List, Taken) :-
    (
        N =< 0
    ->
        List = [_ | T],
        take(N-1, List, Taken0),
        Taken = [1 | Taken0]
    ;
        Taken = []
    ).

Now if the only mode available for length is length(in) = out, then the
constraint would be scheduled after the call to take, which could
possibly fail due to the input being inadmissable but the admissibility
check would never occur because L is never instantiated enough to check
it.

Pete
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list