[mercury-users] partial instantiation?

Paul Bone pbone at csse.unimelb.edu.au
Wed Apr 14 13:56:13 AEST 2010


On Wed, Apr 14, 2010 at 01:52:39PM +1000, Paul Bone wrote:
> On Wed, Apr 14, 2010 at 05:38:04AM +0200, Tomas By wrote:
> > On Wed, April 14, 2010 05:14, Paul Bone wrote:
> > > On Wed, Apr 14, 2010 at 05:03:02AM +0200, Tomas By wrote:
> > >> I suspect I would also need complicated mode declarations for the third
> > >> parameter (cmdproc), as that also has free variables?
> > >
> > > Yes, that's right.
> > 
> > Ok, thanks, I will see if I can get it to work.
> > 
> > Just one more question right now: how many different inst/mode declarations
> > (for parameter three) will I need here?
> > 
> > |cmd( "command", [],              dosomething(0,"filename") ).
> > |cmd( "command", [str(F)],        dosomething(0,F)          ).
> > |cmd( "command", [int(N)],        dosomething(N,"filename") ).
> > |cmd( "command", [str(F),int(N)], dosomething(N,F)          ).
> > 
> > Four? (bound-bound, bound-free, free-bound, free-free)
> 
> Oh!
> 
> Now that I look more closely in some cases (of cmd/3) you are fully
> instantiating the 2nd and 3rd arguments, and it other cases you are only using
> partial instantiation.  You need to use either one or the other in _all_ cases.
> 
> Try to work out why you _need_ partial instantiation.  If you can't find a good
> reason then you don't need it :-).  It might also be useful to re-think your
> data structures, try using the maybe type within the arguments of the
> dosomething constructor.
> 

(actually, I don't think maybe will do what you want either.

I also suspect that you think that Mercury supports logic variables, it does
not.  Cosider:

    X = Y,
    Y = 3

In prolog this will bind X to 3.  In Mercury this is not valid.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 489 bytes
Desc: Digital signature
URL: <http://lists.mercurylang.org/archives/users/attachments/20100414/aa7ba5f9/attachment.sig>


More information about the users mailing list