[mercury-users] polymorphism
Tyson Richard DOWD
trd at students.cs.mu.oz.au
Thu Sep 25 12:13:34 AEST 1997
Tomas By wrote:
> Hi,
>
> Suppose I have the following types:
>
> :- type a(X,Y) ---> x(X) ; y(Y) ; z(int).
>
> :- type i ---> [...].
> :- type j ---> [...].
>
> :- type m ---> [...].
> :- type n ---> [...].
>
> and I want a single procedure 'p/1' that handles things of the types:
>
> a(i,m)
> a(i,n)
> a(j,m)
> a(j,n)
You have 4 different types here. If you want a single predicate to
handle these cases, you'll need to put wrappers around them.
Either:
Create a new type
:- type b ---> w(a(i,m)) ; x(a(i,n)) ; y(a(j,m)) ; z(a(j,n)).
So p operates on b
Or: Create two new types:
:- type c ---> q(i) ; r(j).
:- type d ---> s(n) ; t(m).
So p operates on a(c,d).
Which one you choose really depends on the problem domain - if
the operations involving i and j are separate to m an n (as it
appears to be because of the definition of a), then the second
alternative may be more natural.
I think there are other alternatives that involve unimplemented
features...
--
Tyson Dowd # Another great idea from the
# people who brought you
trd at .cs.mu.oz.au # Beer Milkshakes!
http://www.cs.mu.oz.au/~trd # Confidence --- Red Dwarf
More information about the users
mailing list