2,954
edits
m (Text replacement - "<source" to "<syntaxhighlight") |
(Function assignment section, with references from HOPL4) |
||
(2 intermediate revisions by 2 users not shown) | |||
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 | {{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 function]]s, 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</syntaxhighlight>. 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=== | ||
Line 8: | Line 8: | ||
│1 2 3│1 2 3│ | │1 2 3│1 2 3│ | ||
└─────┴─────┘ | └─────┴─────┘ | ||
</ | </syntaxhighlight> | ||
===Indexed assignment=== | ===Indexed assignment=== | ||
Individual elements can be updated using index assignment: | Individual elements can be updated using index assignment: | ||
Line 17: | Line 17: | ||
│1│1 2 3│ | │1│1 2 3│ | ||
└─┴─────┘ | └─┴─────┘ | ||
</ | </syntaxhighlight> | ||
A semicolon is necessary when dealing with a [[matrix]]: | A semicolon is necessary when dealing with a [[matrix]]: | ||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
Line 33: | Line 33: | ||
0 0 5 | 0 0 5 | ||
6 7 8 | 6 7 8 | ||
</ | </syntaxhighlight> | ||
For higher-[[rank]] arrays, the number of semicolons needed is one less than the array rank. | For higher-[[rank]] arrays, the number of semicolons needed is one less than the array rank. | ||
===Modified assignment=== | ===Modified assignment=== | ||
Line 42: | Line 42: | ||
var | var | ||
43 | 43 | ||
</ | </syntaxhighlight> | ||
<syntaxhighlight lang=apl inline>var+←1</ | <syntaxhighlight lang=apl inline>var+←1</syntaxhighlight> is essentially equivalent to <syntaxhighlight lang=apl inline>1⊣var←var+1</syntaxhighlight> 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: | ||
Line 62: | Line 62: | ||
0 x 0 | 0 x 0 | ||
0 0 0 | 0 0 0 | ||
</ | </syntaxhighlight> | ||
== Function assignment == | |||
In modern dialects, the right hand side of assignment may be a [[function]] (or possibly an [[operator]]). This allows [[Anonymous function|anonymous]] and [[tacit]] functions to be named. | |||
<syntaxhighlight lang=apl> | |||
sum←+/ | |||
sum ⍳10 | |||
55 | |||
</syntaxhighlight> | |||
Before the 1980s, only arrays could be assigned: [[defined function]]s included the function name in the header in order to associate it with the function, and [[derived function]]s could not be named directly. Instead the programmer would define a function that explicitly called that derived function on its arguments. [[Iverson]]'s 1978 paper [[Operators and Functions]] used a new [[glyph]], an assignment arrow with a bar above (that is, [[overstruck]] with a [[high minus]]), as [[Adin Falkoff]] objected to the use of the unmodified assignment arrow.<ref>[[Roger Hui]] and [[Morten Kromberg]]. [https://dl.acm.org/doi/abs/10.1145/3386319 ''APL since 1978'']. ACM HOPL IV. 2020-06.</ref> However, Iverson used the assignment arrow directly in several papers he co-authored beginning in 1980.<ref>[[Bob Bernecky]] and [[Ken Iverson]]. [https://www.jsoftware.com/papers/opea.htm Operators and Enclosed Arrays] at [[IPSA '80]]</ref><ref>[[Ken Iverson]] and Peter Wooster. [https://dl.acm.org/doi/abs/10.1145/390007.805349 A function definition operator] at [[APL81]].</ref><ref>[[Ken Iverson]] and [[Arthur Whitney]]. [https://doi.org/10.1145/800071.802236 "Practical uses of a model of APL"] ([https://www.jsoftware.com/papers/APLModel.htm web]) at [[APL82]].</ref> Function assignment was added to [[Dyalog APL]] in version 4.0 in 1986. It was a key feature of [[J]], which supports only anonymous and tacit functions. | |||
== External Links == | == External Links == | ||
Line 70: | Line 82: | ||
* [https://microapl.com/apl_help/ch_020_010_110.htm APLX] | * [https://microapl.com/apl_help/ch_020_010_110.htm APLX] | ||
* J: [https://code.jsoftware.com/wiki/Vocabulary/eqdot local], [https://code.jsoftware.com/wiki/Vocabulary/eqco global] | * J: [https://code.jsoftware.com/wiki/Vocabulary/eqdot local], [https://code.jsoftware.com/wiki/Vocabulary/eqco global] | ||
== References == | |||
<references/> | |||
{{APL built-ins}}[[Category:Primitive functions]] | {{APL built-ins}}[[Category:Primitive functions]] |