Tally: Difference between revisions

Jump to navigation Jump to search
162 bytes added ,  10:59, 11 September 2022
m
Text replacement - "<source" to "<syntaxhighlight"
m (→‎History: HOPL IV reference for older Tally alternatives)
m (Text replacement - "<source" to "<syntaxhighlight")
 
(One intermediate revision by the same user not shown)
Line 4: Line 4:


Tally can compute the length of a [[numeric]] [[vector]] or [[string]].
Tally can compute the length of a [[numeric]] [[vector]] or [[string]].
<source lang=apl>
<syntaxhighlight lang=apl>
       ≢⍳12
       ≢⍳12
12
12
       ≢'string'
       ≢'string'
6
6
</source>
</syntaxhighlight>
It gives the length of the first [[axis]] in a higher-rank array. Tally applied to an array's [[shape]] gives its [[rank]].
It gives the length of the first [[axis]] in a higher-rank array. Tally applied to an array's [[shape]] gives its [[rank]].
<source lang=apl>
<syntaxhighlight lang=apl>
       ≢5 4 3 2⍴1 'b' 3 'd'   
       ≢5 4 3 2⍴1 'b' 3 'd'   
5
5
       ≢⍴5 4 3 2⍴1 'b' 3 'd'
       ≢⍴5 4 3 2⍴1 'b' 3 'd'
4
4
</source>
</syntaxhighlight>
The Tally of a [[scalar]] is always 1.
The Tally of a [[scalar]] is always 1.
<source lang=apl>
<syntaxhighlight lang=apl>
       ≢3.14
       ≢3.14
1
1
</source>
</syntaxhighlight>


== Description ==
== Description ==


Tally returns the length of the first [[axis]] of its argument if it has any axes (that is, if it is not a scalar), and 1 otherwise. This can be modelled easily with [[Shape]] and [[First]]:
Tally returns the length of the first [[axis]] of its argument if it has any axes (that is, if it is not a scalar), and 1 otherwise. This can be modelled easily with [[Shape]] and [[First]]:
<source lang=apl>
<syntaxhighlight lang=apl>
Tally ← {⊃(⍴⍵),1}
Tally ← {⊃(⍴⍵),1}
</source>
</syntaxhighlight>
An alternative implementation is to count the major cells by turning each into a scalar 1 with the [[Rank operator]], then adding them up:
An alternative implementation is to count the major cells by turning each into a scalar 1 with the [[Rank operator]], then adding them up:
<source lang=apl>
<syntaxhighlight lang=apl>
Tally ← +⌿ {1}⍤¯1
Tally ← +⌿ {1}⍤¯1
</source>
</syntaxhighlight>


== History ==
== History ==


Tally was introduced in [[A]] with the name "count" and symbol <source lang=j inline>#</source>. The same notation was carried forward to [[A+]], as well as [[J]] following [[Arthur Whitney]]'s suggestion. The primitive was present in [[NARS2000]] by 2010, with the name "Tally" and symbol <source lang=apl inline>></source><ref>NARS2000 Wiki. [http://wiki.nars2000.org/index.php?title=Tally&oldid=573 Tally]. Old revision: 2010-08-29.</ref>. The symbol <source lang=apl inline>≢</source> for Tally was introduced in [[Dyalog APL 14.0]], and quickly adopted by NARS2000. It was later added to [[GNU APL]] and has been included in many recent APLs based on Dyalog, such as [[ngn/apl]], [[dzaima/APL]], and [[APL\iv]].
Tally was introduced in [[A]] with the name "count" and symbol <syntaxhighlight lang=j inline>#</syntaxhighlight>. The same notation was carried forward to [[A+]], as well as [[J]] following [[Arthur Whitney]]'s suggestion. The primitive was present in [[NARS2000]] by 2010, with the name "Tally" and symbol <syntaxhighlight lang=apl inline>></syntaxhighlight><ref>NARS2000 Wiki. [http://wiki.nars2000.org/index.php?title=Tally&oldid=573 Tally]. Old revision: 2010-08-29.</ref>. The symbol <syntaxhighlight lang=apl inline>≢</syntaxhighlight> for Tally was introduced in [[Dyalog APL 14.0]], and quickly adopted by NARS2000. It was later added to [[GNU APL]] and has been included in many recent APLs based on Dyalog, such as [[ngn/apl]], [[dzaima/APL]], and [[APL\iv]].


Before the addition of Tally (and [[Zilde]]), there were numerous ways to get the length of a vector as a scalar:<ref>[[Roger Hui]] and [[Morten Kromberg]]. [https://dl.acm.org/doi/abs/10.1145/3386319 ''APL since 1978'']. §2.1 Tally. ACM [[HOPL]] IV. 2020-06.</ref>
Before the addition of Tally (and [[Zilde]]), there were numerous ways to get the length of a vector as a scalar:<ref>[[Roger Hui]] and [[Morten Kromberg]]. [https://dl.acm.org/doi/abs/10.1145/3386319 ''APL since 1978'']. §2.1 Tally. ACM [[HOPL]] IV. 2020-06.</ref>
<source lang=apl>
<syntaxhighlight lang=apl>
''⍴⍴v
''⍴⍴v
(⍴0)⍴⍴v
(⍴0)⍴⍴v
Line 46: Line 46:
×/⍴v    ⍝ shortest and obscure
×/⍴v    ⍝ shortest and obscure
0⊥⍴v    ⍝ shortest and obscurest
0⊥⍴v    ⍝ shortest and obscurest
</source>
</syntaxhighlight>


== External links ==
== External links ==

Navigation menu