[mercury-users] Idea for another handy convention (preds, this time).

David Overton dmo at cs.mu.OZ.AU
Thu Jul 27 09:04:52 AEST 2000

On Wed, Jul 26, 2000 at 09:10:39AM -0700, Ralph Becket wrote:
> The language specifies that a function
> :- func f(A, B, C) = Z.
> lacking a mode declaration is assumed to have the conventional
> mode, namely
> :- mode f(in, in, in) = out is det.
> This is especially handy for function lambdas.
> I would like to propose a similar default for preds, namely
> that a predicate
> :- pred p(A, B, C).
> lacking a mode declaration is assumed to have the conventional
> (in most other languages) mode of
> :- mode p(in, in, in) is semidet.
> The default for functions is to only require explicit mode
> declarations when something `unusual' is going on; I propose
> we extend this idea to predicates as well.

IMHO, a predicate that does not have the mode/determinism
`p(in, ..., in) is semidet' is a lot less `unusual' than a function
that does not have mode `f(in, ..., in) = out is det'.  E.g. at least
95% (conservative guess) of the predicates I write have at least one
output argument and determinism `det'.

Also, currently when there is no mode declaration for a predicate,
this is an indication that the compiler should try to infer the
mode(s) for that predicate (it can presently only do this for
predicates that aren't exported from a module).

However, since we don't do mode inference of lambda expresssions,
perhaps `pred(in, ..., in) is semidet' would be a reasonable default
for these, especially since they are the kinds of predicates you are
most likely to use if programming in a functional style, as in the
example Ralph gives of `list__filter'.

David Overton      Department of Computer Science & Software Engineering
PhD Student        The University of Melbourne, Victoria 3010, Australia
+61 3 8344 9159    http://www.cs.mu.oz.au/~dmo
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