Left root inconsistently attributed

Richard A. O'Keefe ok@atlas.otago.ac.nz
Mon, 1 Mar 1999 12:17:14 +1300 (NZDT)


I have a pseudo-random generator I've been using for years in a variety
of languages.  There's stuff for random subsets and random permutations
and so on, but it's based on Algorith AS 183 from the journal Applied
Statistics.  The state of this random number generator is a triple of
16-bit integers.

The package works fine when I declare

	:: RNG_State :== (Int, Int, Int)

Trying to take advantage of Clean's annotations, I strengthened this to

	:: RNG_State :== (!Int, !Int, !Int)

and that worked just fine.  Next, I tried to make the whole thing
single-threaded:

	:: RNG_State :== *(!Int, !Int, !Int)

but I get the error message

	Error [as183.dcl,8,RNG_State]:
	left root inconsistently attributed

I haven't the faintest idea what this means.  I tried the only thing
I could see on the "left", namely !Int, and the only inconsistency I
could imagine (* somewhere and not elsewhere) and tried

	:: *RNG_State := *(!*Int, !*Int, !*Int)

but stuff get the same error message.

My intention is that RNG states should be used in a single-threaded way,
so when I take a random subset or something I'm not turning over lots
of storage allocating new RNG states.

If this _isn't_ the way to say it, what is?