[mercury-users] equality functions

David Overton dmo at ender.cs.mu.oz.au
Mon Mar 20 17:20:49 AEDT 2000

On Mon, Mar 20, 2000 at 11:27:34AM +1100, Michael Day wrote:
> Is it useful (or possible) to define functions such as:
> :- func '<'(T, T) = bool.
> :- func '='(T, T) = bool.
> ...
> and so forth?

Not sure if it's useful.  What sort of use did you have in mind?

> Would this cause awful conflicts with their current use as predicates, or
> would their use be unambiguous?

Their use should be unambiguous in most cases, although using '='/2 as
a function could get confusing for human readers.

> I tried to construct a more general "succeeded" function that takes a
> predicate and returns bool, but was unable to get the modes correct. Is
> such a predicate even possible?

:- func succeeded(pred) = bool.
:- mode succeeded((pred) is semidet) = out is det.

succeeded(P) = ( P -> yes ; no ).

You can use this for any predicate without output arguments by
currying the inputs, including '<', '>', etc.
Note that you need parenthesis around `pred' in the mode declaration
because `pred' is an operator.

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