Operate and assign the value of an expression.

val1 op= val2

val1 |
- |
A scalar, series, or table. |

val2 |
- |
A scalar, series, or table. |

A scalar, series, or table.

j = 10;

j += 2;

Variable j contains the value 12.

W1: {1, 2, 3, 4}

W1 += 2

W1 contains the series {3, 4, 5, 6}. Each value of the series is incremented by the value 2.0.

a = {1, 2, 3, 4}

a &= 0x01

Variable a contains the series {1, 0, 1, 0} indicating the values that have the lowest bit set.

b = {1, 2, 3, 4}

b |= 0x01

Variable b contains the series {1, 3, 3, 5}.

b = {1, 2, 3, 4}

b |^= 0x01

Variable b contains the series {0, 3, 2, 5}.

The following assignment operators are supported:

Operator |
Description |

+= |
add then assign |

-= |
subtract then assign |

*= |
multiply then assign |

/= |
divide then assign |

%= |
modulo then assign |

>>= |
bit right shift then assign |

<<= |
bit left shift then assign |

&= |
bit and shift then assign |

|= |
bit or then assign |

|^= |
bit xor then assign |

@= |
append then assign |

@@ |
concatenate |

If e1 and e2 are expressions, then

e1 op= e2

is equivalent to

e1 = (e1) op (e2)

except that e1 is computed only once. Notice the parenthesis.

x *= y + 1

is equivalent to

x = x * (y + 1)

not

x = x * y + 1

Assignment operators are not only fast and concise, they correspond better to the way people think. We say "add 2 to j" or "increment j by 2," not "take j, add 2, then put the result back into j." Thus, j += 2.

The statement:

a = b @@ c

is more compact and equivalent to

a = concat(b, c)

The statement:

a @= b

is equivalent to

append(a, b)

The @= operator appends the series B to the end of series A in place. a @= b is much faster than a = a @@ b for large series because @= operates on the existing series whereas @@ creates and assigns a new series.

See DADiSP/VectorXL to optimize arithmetic operations on series.