This is an old version, view current version.
17.6 Aliasing in Stan containers
Stan expressions are all evaluated before assignment happens, so there
is no danger of so-called aliasing in array, vector, or matrix
operations. Contrast the behavior of the assignments to u
and
x
, which start with the same values.
The loop assigning to u
and the compound slicing assigning to x
.
the following trivial Stan program.
transformed data {
vector[4] x = [ 1, 2, 3, 4 ]';
vector[4] u = [ 1, 2, 3, 4 ]';
for (t in 2:4) {
u[t] = u[t - 1] * 3;
}
x[2:4] = x[1:3] * 3;
print("u = ", u);
print("x = ", x);
}
The output it produces is,
u = [1, 3, 9, 27]
x = [1, 3, 6, 9]
In the loop version assigning to u
, the values are updated before being used to
define subsequent values; in the sliced expression assigning to
x
, the entire right-hand side is evaluated before assigning to
the left-hand side.