Assignment: Difference between revisions
(APL uses 6-space indents) |
m (Text replacement - "<source" to "<syntaxhighlight") |
||
Line 1: | Line 1: | ||
{{Built-in|Assignment|←}} allows associating a name with an [[array]] value. Some dialects also allow assignment of function and operator values using the assignment arrow. In [[defined functions]], assignment is global by default, but can be made local through explicit mention of the target name in the function header, or through dynamic [[shadow]]ing using < | {{Built-in|Assignment|←}} allows associating a name with an [[array]] value. Some dialects also allow assignment of function and operator values using the assignment arrow. In [[defined functions]], assignment is global by default, but can be made local through explicit mention of the target name in the function header, or through dynamic [[shadow]]ing using <syntaxhighlight lang=apl inline>⎕SHADOW</source>. In [[dfn]]s, assignments are local by default, but can be made global by explicit mention of the target namespace. Modified/indexed/selective assignment updates the most local definition. | ||
==Examples== | ==Examples== | ||
===Basic usage=== | ===Basic usage=== | ||
Common examples (boxing on, and [[index origin]] is 0): | Common examples (boxing on, and [[index origin]] is 0): | ||
< | <syntaxhighlight lang=apl> | ||
⎕←mat←(1 2 3)(1 2 3) | ⎕←mat←(1 2 3)(1 2 3) | ||
┌─────┬─────┐ | ┌─────┬─────┐ | ||
Line 11: | Line 11: | ||
===Indexed assignment=== | ===Indexed assignment=== | ||
Individual elements can be updated using index assignment: | Individual elements can be updated using index assignment: | ||
< | <syntaxhighlight lang=apl> | ||
mat[0]←1 | mat[0]←1 | ||
mat | mat | ||
Line 19: | Line 19: | ||
</source> | </source> | ||
A semicolon is necessary when dealing with a [[matrix]]: | A semicolon is necessary when dealing with a [[matrix]]: | ||
< | <syntaxhighlight lang=apl> | ||
mat←3 3⍴⍳9 | mat←3 3⍴⍳9 | ||
mat | mat | ||
Line 37: | Line 37: | ||
===Modified assignment=== | ===Modified assignment=== | ||
Some dialects allow placing a function the the immediate left of the assignment arrow: | Some dialects allow placing a function the the immediate left of the assignment arrow: | ||
< | <syntaxhighlight lang=apl> | ||
var←42 | var←42 | ||
var+←1 | var+←1 | ||
Line 43: | Line 43: | ||
43 | 43 | ||
</source> | </source> | ||
< | <syntaxhighlight lang=apl inline>var+←1</source> is essentially equivalent to <syntaxhighlight lang=apl inline>1⊣var←var+1</source> except that the result is [[shy]]. | ||
===Modified indexed assignment=== | ===Modified indexed assignment=== | ||
Modified assignment can also be combined with indexed assignment: | Modified assignment can also be combined with indexed assignment: | ||
< | <syntaxhighlight lang=apl> | ||
mat←3 3⍴0 | mat←3 3⍴0 | ||
mat | mat |
Revision as of 21:01, 10 September 2022
←
|
Assignment (←
) allows associating a name with an array value. Some dialects also allow assignment of function and operator values using the assignment arrow. In defined functions, assignment is global by default, but can be made local through explicit mention of the target name in the function header, or through dynamic shadowing using <syntaxhighlight lang=apl inline>⎕SHADOW</source>. In dfns, assignments are local by default, but can be made global by explicit mention of the target namespace. Modified/indexed/selective assignment updates the most local definition.
Examples
Basic usage
Common examples (boxing on, and index origin is 0): <syntaxhighlight lang=apl>
⎕←mat←(1 2 3)(1 2 3)
┌─────┬─────┐ │1 2 3│1 2 3│ └─────┴─────┘ </source>
Indexed assignment
Individual elements can be updated using index assignment: <syntaxhighlight lang=apl>
mat[0]←1 mat
┌─┬─────┐ │1│1 2 3│ └─┴─────┘ </source> A semicolon is necessary when dealing with a matrix: <syntaxhighlight lang=apl>
mat←3 3⍴⍳9 mat
0 1 2 3 4 5 6 7 8
mat[0 1;]
0 1 2 3 4 5
mat[0 1;0 1]←0 mat
0 0 2 0 0 5 6 7 8 </source> For higher-rank arrays, the number of semicolons needed is one less than the array rank.
Modified assignment
Some dialects allow placing a function the the immediate left of the assignment arrow: <syntaxhighlight lang=apl>
var←42 var+←1 var
43 </source> <syntaxhighlight lang=apl inline>var+←1</source> is essentially equivalent to <syntaxhighlight lang=apl inline>1⊣var←var+1</source> except that the result is shy.
Modified indexed assignment
Modified assignment can also be combined with indexed assignment: <syntaxhighlight lang=apl>
mat←3 3⍴0 mat
0 0 0 0 0 0 0 0 0
mat[0 1;1]+←1 mat
0 1 0 0 1 0 0 0 0
mat[1;1],←'x' mat
0 1 0 0 x 0 0 0 0 </source>