Marc,
So, in Visual Basic you might do
Do
PracticeTrial()
Loop Until (Criterion = True)
and the equivalent in E-Prime would be something like
PracticeTrialList
PracticeTrialProc
{PracticeTrial stuff...}
CriterionCode: If {criterion met} Then
PracticeTrialList.Terminate
For this to work, have PracticeTrialList set with one row using
PracticeTrialProc, and either set the row Weight to some large number
(e.g., 10000), or set PracticeList to exit after some large number of
cycles, samples, or seconds (in the List properties). Yes, you
cannot set a List to run for an indefinite number of trials, you do
have to give it some upper bound, but you can make that very
large. Does that sound reasonable, or am I still missing something?
Actually, though, from what you describe you really want to test
criterion for *blocks* of trials, as well as showing a message before
running another practice block, in which case in Visual Basic you
might do something more like
GeneralInstructions()
Do ' exit from within loop
InitializeTrialBlock()
For i = 1 to nTrialsPerBlock
PracticeTrial()
Next i
If (Criterion = True) Then Exit Do
PracticeAgainMessage()
Loop
And with that in mind I might restructure your program as follows:
GeneralInstructionText
PracticeBlockList
PracticeBlockProc
PracticeTrialList
PracticeTrialProc
...
BlockCriterionCode:
If {participant misses FEWER than 2 RAT items} Then
PracticeBlockList.Terminate
Goto PracticeBlockEndLabel
PracticeAgainText
PracticeBlockEndLabel
So PracticeTrialList does all the trials for one block,
PracticeBlockProc is set to run some large number of blocks of these
trials, and BlockCriterionCode terminates PracticeBlockList and skips
past PracticeAgainText if criterion is met, otherwise it shows
PracticeAgainText and then runs another block. Do you think this would work?
Thanks,
-- David McFarlane