[m-rev.] for review: state vars syntax sugar

Peter Schachte schachte at csse.unimelb.edu.au
Fri Jan 26 16:57:22 AEDT 2007

Ralph Becket wrote:

> What about running DCGs "backwards"?  We might want to do the same with
> state variables.

Touché!  And for the X>>dead mode, doesn't X have to be unique?
And there is also an implied mode, and the mostly unique versions.

But they're still pretty orthogonal:

Forward	modes: 	       X>>Final, Initial>>X
Backward modes:        Initial>>X, X>>Final

For normal versions:   Initial=free
For implied versions:  Initial=X

Normal:                Final=X,
Destructive:           Final=dead and X must be unique
Unique:                Final=unique and X must be unique
Mostly destructive:    Final=mostly_unique and X must be mostly_unique
Mostly unique:         Final=mostly_dead and X must be mostly_unique

If that covers all useful cases, how about this for a syntax:

  !(X)                 means X>>X, free>>X
  !destructive         means unique>>dead, free>>unique
  !mostly_destructive  means mostly_unique>>mostly_dead, free>>mostly_unique
  !input(X)            means X>>X, X>>X
  !backward(X)         means B, A if !(X) means A, B

So most of the time, the mode for a state var would just be !ground, or
occasionally !destructive, which look pretty good to me.  Also note that if
Mercury ever supports ui modes, then !unique means (ui, uo).

Peter Schachte              I worry that 10 or 15 years from now, [my child]
schachte at cs.mu.OZ.AU        will come to me and say 'Daddy, where were you
www.cs.mu.oz.au/~schachte/  when they took freedom of the press away from
Phone: +61 3 8344 1338      the Internet?' -- Mike Godwin
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au

More information about the reviews mailing list