[m-dev.] State variable syntax - last call for opinions

Ralph Becket rafe at cs.mu.OZ.AU
Thu Jan 31 12:44:43 AEDT 2002

Peter Schachte, Thursday, 31 January 2002:
> On Wed, Jan 30, 2002 at 05:57:15PM +1100, Ralph Becket wrote:
> > 
> > Personally I don't find this any more attractive than the other options
> > (3 would be my choice.)  The drawback is that !!X is going to be the
> > common case while !X and !:X will be used only occasionally.
> Actually, I deliberately made the operator to be used in goals and
> clause heads visually denser to make it stand out more.  I'm concerned
> that in a goal like
>     foobar(Something, big_term(1,2,3), Anothervar, !Thread, Output)
> the single ! is hard to see, and it would be easy to see that as a
> call to foobar/5.  I don't even think !! is enough.

Well, this is a moot point.  The lightweight syntax !X representing a
pair of arguments is the one thing everybody (else) has managed to agree
on!  I think the single ! is sufficiently clear - you could always train
your syntax highlighting editor of choice to emphasise it...

> Also, a few nitty detail questions.  In any clause containing !Foo,
> would an unadorned Foo be an error?  I think it should.  Permitting it
> would be not only giving users enough rope to hang themselves, it
> would be wrapping it around their necks and tying it to the rafters as
> well.

While I'm not sure that it's tantamount to lynching the programmer, I
agree that it should be an error.  I'll be sure to check for it...

> (Using my notation above) is referring to !X before the first !:X an
> error?  Again, I think it should be.

Not if !.X appears in the head of the clause.

> For a clause without !:X (or !!X) in the head, if the last atom
> mentioning X has !:X in it, does this give a singleton warning?  I
> believe it should, since your binding a variable not used elsewhere in
> the clause.

There's no connection between modes and !.X and !:X - it would just be a
convention of interpretation that !.X denotes an input and !:X an

> Is it an error to have multiple !:X in the same atom?  I think it
> probably should be.  You could give it a sensible meaning, but I think
> it would be too confusing to use.

I'd rather stick with a simple, general transformation and let the
programmer learn to avoid baroque coding styles the hard way.

- Ralph
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au

More information about the developers mailing list