[mercury-users] discriminant types, generators and higher-order term+Darwin questions

Matthias Kretschmer mccratch at gmx.net
Mon Jul 14 16:30:14 AEST 2003


Thank you for the fast response and help. This makes my life easier :)

Am Sonntag, 13.07.03 um 17:48 Uhr schrieb Fergus Henderson:

> Yes, there is.  The code for mypred/1 does need to explicitly call a
> generator predicate.  But you don't have to write the generator
> predicate by hand for every type.  It's quite simple to use the 
> facilities
> in the `construct' module to write a generator that will work for any
> enumeration type:
>     :- import_module construct, list, int, std_util, type_desc.
>     gen_enum(Val) :-
> 	Type = type_desc__type_of(Val),
> 	list__member(FunctorNum, 0 `..` (construct__num_functors(Type) - 1)),
> 	Univ = construct__construct(Type, FunctorNum, []),
> 	std_util__det_univ_to_type(Univ, Val).
> Then you can use this generic definition of gen_enum/1 in my_pred/1:
>     mypred(someint(2, X)) :- gen_enum(X).

And now I came up with two other questions:

1. I was having a predicate using in solutions/2 which I wanted to use 
with two different modes. So the compiler complained. I understand as 
the language reference tells one, that higher order terms are only 
allowed to have one mode. So a workaround would be to make something 
like (pred(X::out) is nondet/multi :- myoldpred(X)). I was just 
wondering if this should be changed in a way, or are there some design 
decissions I am currently not aware of?

2. as one can read in README.MacOS there is currently no support for 
dynamic libraries. I was wondering what is the current problem with 
dynamic libraries on Darwin? One thing I guess is, that the 
Boehm-Weiser garbage-collector used in some modified older version 
isn't capable of supporting garbage-collection with dynamic libraries 
on Darwin. If it is so, what modifications were applied to the garbage 
collector, am I able to exchange it with some more modern version of 
the garbage collector to be one step closer to dynamic libraries on OS 

Matthias Kretschmer

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