Well... Implementing specific constraints on randomization at
runtime gets very tricky, try searching for discussions using terms
such as "random", "pseudorandom", "pseudo-random", "constrain", and
"constraint". Offhand, I feel very leery of any approach using
List.SetWeight, and I especially hope that you do not try that while
the List itself is running!
PST shows one time-honored (though crude) method for implementing
on-the-fly randomization with contstraints in their "No Repeats on
Consecutive Trials" examples on their website, and you might adapt
that approach for your program. That method, however, is a sort of
nondeterministic "bogosort" (look that up on Wikipedia) which suffers
several problems.
The cheap answer, which you will find in other discussions, is just
to randomize everything before runtime outside of E-Prime. Construct
a "random" sequence that has the properties you seek, then implement
that as a Sequential List in E-Prime. If you want different random
orders for different subjects, then construct a few more sequences
outside of E-Prime, implement each of your sequences as a nested List
(running in Sequential order), and then have E-Prime pick one of
those nested Lists on each run (perhaps using a main List set to
Counterbalance order). Or, generate your sequence outside of E-Prime
as a properly formatted .txt or .xml file, and then use List
LoadMethod "File" to read in the sequence at runtime.
-- David McFarlane