[mercury-users] partial instantiation?
pbone at csse.unimelb.edu.au
Wed Apr 14 12:48:14 AEST 2010
On Wed, Apr 14, 2010 at 03:36:42AM +0200, Tomas By wrote:
> Hi all,
> I have a little program that I want to accept optional command line
> parameters, so that, for example:
> $ ./binary command
> $ ./binary command filename
> $ ./binary command 100
> $ ./binary command filename 100
> would all map to `command' (which is implemented by dosomething/2),
> with the left out parameters filled in with default values automatically.
> A Prologesque solution might be:
> |:- pred cmd(string,list(cmdarg),cmdproc).
> |:- mode cmd(out,out,out) is nondet.
> |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) ).
> where the cmdarg and cmdproc types are fine, but the compiler chokes on
> the modes. Am I right in seeming to remember this is not supported, but
> that there have been some work on it, but not everybody agrees it is
> useful at all?
The problem is that P and N are never instantiated.
You might find that the modes.
:- mode cmd(in, in, out) is semidet.
:- mode cmd(out, out, in) is det.
do work, because N and P are bound as one of cmd's inputs.
Alternatively, if you did want partial instantiation, and I don't think you do,
you would have to use a different mode rather than out, out, out that describes
the partial instantiation.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 489 bytes
Desc: Digital signature
More information about the users