Look at the following code and try to answer these two questions: When is foo() scheduled to play? When is bar() scheduled to play? Be sure to read about the @ scheduler if you haven’t already done so.
@0 x = 0 @1 x = 3 @(5 + x) foo() @5: @x bar()
The answers: foo() is scheduled to play at beat 5, while bar() plays at beat 8.
Why is this?
For foo(), the expression for the scheduler @(5 + x) is evaluated at beat 0. At beat 0, x equals 0. This is a single schedule.
For bar(), there are two separate schedules that happen in tandem: @5 and then @x. The @x schedule isn’t evaluated until the @5 schedule is triggered. You might say that the @x schedule is a task of the @5 schedule. At the time @x is evaluated, x equals 3.
Of course, this is all theoretical at the moment.