Assignment: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
mNo edit summary
(APL uses 6-space indents)
Line 4: Line 4:
Common examples (boxing on, and [[index origin]] is 0):
Common examples (boxing on, and [[index origin]] is 0):
<source lang=apl>
<source lang=apl>
  ⎕←mat←(1 2 3)(1 2 3)
      ⎕←mat←(1 2 3)(1 2 3)
┌─────┬─────┐
┌─────┬─────┐
│1 2 3│1 2 3│
│1 2 3│1 2 3│
Line 12: Line 12:
Individual elements can be updated using index assignment:
Individual elements can be updated using index assignment:
<source lang=apl>
<source lang=apl>
  mat[0]←1
      mat[0]←1
  mat
      mat
┌─┬─────┐
┌─┬─────┐
│1│1 2 3│
│1│1 2 3│
Line 20: Line 20:
A semicolon is necessary when dealing with a [[matrix]]:
A semicolon is necessary when dealing with a [[matrix]]:
<source lang=apl>
<source lang=apl>
  mat←3 3⍴⍳9
      mat←3 3⍴⍳9
  mat
      mat
0 1 2
0 1 2
3 4 5
3 4 5
6 7 8
6 7 8
  mat[0 1;]
      mat[0 1;]
0 1 2
0 1 2
3 4 5
3 4 5
  mat[0 1;0 1]←0
      mat[0 1;0 1]←0
  mat
      mat
0 0 2
0 0 2
0 0 5
0 0 5
Line 38: Line 38:
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:
<source lang=apl>
<source lang=apl>
  var←42
      var←42
  var+←1
      var+←1
  var
      var
43
43
</source>
</source>
Line 47: Line 47:
Modified assignment can also be combined with indexed assignment:
Modified assignment can also be combined with indexed assignment:
<source lang=apl>
<source lang=apl>
  mat←3 3⍴0
      mat←3 3⍴0
  mat
      mat
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
  mat[0 1;1]+←1
      mat[0 1;1]+←1
  mat
      mat
0 1 0
0 1 0
0 1 0
0 1 0
0 0 0
0 0 0
  mat[1;1],←'x'
      mat[1;1],←'x'
  mat
      mat
0 1 0
0 1 0
0 x 0
0 x 0

Revision as of 01:29, 13 February 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 ⎕SHADOW. 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):

      ⎕←mat←(1 2 3)(1 2 3)
┌─────┬─────┐
│1 2 3│1 2 3│
└─────┴─────┘

Indexed assignment

Individual elements can be updated using index assignment:

      mat[0]←1
      mat
┌─┬─────┐
│1│1 2 3│
└─┴─────┘

A semicolon is necessary when dealing with a matrix:

      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

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:

      var←42
      var+←1
      var
43

var+←1 is essentially equivalent to 1⊣var←var+1 except that the result is shy.

Modified indexed assignment

Modified assignment can also be combined with indexed assignment:

      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

External Links

Documentation

APL built-ins [edit]
Primitives (Timeline) Functions
Scalar
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Non-Scalar
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentityStopSelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndexCartesian ProductSort
Selector Index generatorGradeIndex OfInterval IndexIndicesDealPrefix and suffix vectors
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-BeamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner ProductDeterminantPowerAtUnderRankDepthVariantStencilCutDirect definition (operator)
Quad names Index originComparison toleranceMigration levelAtomic vector