4,494
edits
m (add missing url) |
|||
Line 9: | Line 9: | ||
== Examples == | == Examples == | ||
Medium-sized array constants are often needed in code. Due to the lack of a native multi-line notation, programmers have resorted to various ad-hoc methods of approximating such, usually at the cost of reduced [[readability]]. A very common technique is repeated [[concatenate|concatenation]] | Medium-sized array constants are often needed in code. Due to the lack of a native multi-line notation, programmers have resorted to various ad-hoc methods of approximating such, usually at the cost of reduced [[readability]]. A very common technique is repeated [[concatenate|concatenation]] resulting in the desired value being held in a variable (<syntaxhighlight lang=apl inline>z</syntaxhighlight> in the below examples), as opposed to array notation which can express the final value directly. In addition, the traditional technique sometimes involves the creation of helper variables as a side effect. | ||
<syntaxhighlight lang=apl> | |||
=== Basic arrays === | |||
{| class=wikitable | |||
! Traditional method !! Array notation !! Description | |||
|- | |||
|<syntaxhighlight lang=apl>(0 6 1 8)(1 4 1 4 2)(2 7 1 8 2 8)(3 1 4 1 5)</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>(0 6 1 8 ⋄ 1 4 1 4 2 ⋄ 2 7 1 8 2 8 ⋄ 3 1 4 1 5)</syntaxhighlight> | |||
|Vector of numeric vectors on a single line. | |||
|- | |||
|<syntaxhighlight lang=apl>z← (0 6 1 8)(1 4 1 4 2) | |||
z,←(2 7 1 8 2 8)(3 1 4 1 5)</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>(0 6 1 8 ⋄ 1 4 1 4 2 | |||
2 7 1 8 2 8 ⋄ 3 1 4 1 5)</syntaxhighlight> | |||
|Vector of numeric vectors split over two lines. | |||
|- | |||
|<syntaxhighlight lang=apl>z←,⊂'Three' | |||
z,←⊂'Blind' | |||
z,←⊂'Mice'</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>('Three' | |||
'Blind' | |||
'Mice')</syntaxhighlight> | |||
|Vector of character vectors, one on each line. (The traditional method includes an unnecessary <syntaxhighlight lang=apl inline>,</syntaxhighlight> to indicate that <syntaxhighlight lang=apl inline>z</syntaxhighlight> will be a vector.) | |||
|- | |||
|<syntaxhighlight lang=apl>z←⍉⍪0 6 1 8 | |||
z⍪← 1 4 1 4 | |||
z⍪← 2 7 1 8 | |||
z⍪← 3 1 4 2</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>[0 6 1 8 | |||
1 4 1 4 | |||
2 7 1 8 | |||
3 1 4 2]</syntaxhighlight> | |||
|Numeric matrix. | |||
|- | |||
|<syntaxhighlight lang=apl>z←⍪10 | |||
z⍪←20 | |||
z⍪←30 | |||
z⍪←40</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>[10 | |||
20 | |||
30 | |||
40]</syntaxhighlight> | |||
|Column matrix. | |||
|} | |||
=== Involved arrays === | |||
{| class=wikitable | |||
! Traditional method !! Array notation !! Description | |||
|- | |||
|<syntaxhighlight lang=apl>a←⍉⍪0 0 1 | |||
a⍪← 1 0 1 | |||
a⍪← 0 1 1 | |||
z←,⊂a | |||
a←⍉⍪0 1 1 | |||
a⍪← 1 1 0 | |||
a⍪← 0 1 0 | |||
z,←⊂a | |||
a←⍉⍪0 1 1 1 | |||
a⍪← 1 1 1 0 | |||
z,←⊂a | |||
a←⍉⍪0 1 1 0 | |||
a⍪← 1 0 0 1 | |||
a⍪← 0 1 1 0 | |||
z,←⊂a</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>([0 0 1 | |||
1 0 1 | |||
0 1 1] | |||
[0 1 1 | |||
1 1 0 | |||
0 1 0] | |||
[0 1 1 1 | |||
1 1 1 0] | |||
[0 1 1 0 | |||
1 0 0 1 | |||
0 1 1 0])</syntaxhighlight> | |||
|Vector of matrices. | |||
|- | |||
|<syntaxhighlight lang=apl>z←⍉⍪0 'OK' | |||
z⍪← 1 'WS FULL' | |||
z⍪← 2 'SYNTAX ERROR' | |||
z⍪← 3 'INDEX ERROR' | |||
z⍪← 4 'RANK ERROR'</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>[0 'OK' | |||
1 'WS FULL' | |||
2 'SYNTAX ERROR' | |||
3 'INDEX ERROR' | |||
4 'RANK ERROR']</syntaxhighlight> | |||
|Table with numeric and text columns. | |||
|- | |||
|<syntaxhighlight lang=apl>a←⍉⍪3 1 4 | |||
a⍪← 1 5 0 | |||
a←↑a | |||
b←⍉⍪2 7 0 | |||
b⍪← 2 0 0 | |||
z←a,[0.5] b</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>[[3 | |||
1 5 9] | |||
[2 7 | |||
2]]</syntaxhighlight> | |||
|Rank 3 numeric array. | |||
|- | |||
|<syntaxhighlight lang=apl>a←⍉⍪3 1 4 | |||
a⍪← 1 5 | |||
a←↑a | |||
b←⍉⍪2 7 | |||
b⍪← 2 | |||
b←↑b | |||
z←↑a b</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>[[3 | |||
1 5 9] | |||
[2 7 | |||
2]]</syntaxhighlight> | |||
|Rank 3 numeric array relying on automatic padding with [[fill element]]. | |||
|- | |||
|<syntaxhighlight lang=apl> | |||
z←⍉⍪'fns' ((0 1)(0.7 0)(0.7 0)×size) | |||
z⍪← 'fnd' ((0 1)(0 0)(0 0)×size) | |||
z⍪← 'lines'((0 0)(0.7 0)(0.7 0)×size) | |||
z⍪← 'lnd' ((0 0)(0 0)(0 0)×size) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
|<syntaxhighlight lang=apl> | |||
<syntaxhighlight lang=apl> | ['fns' ((0 1 ⋄ 0.7 0 ⋄ 0.7 0)×size) | ||
'fnd' ((0 1 ⋄ 0 0 ⋄ 0 0)×size) | |||
'lines'((0 0 ⋄ 0.7 0 ⋄ 0.7 0)×size) | |||
'lnd' ((0 0 ⋄ 0 0 ⋄ 0 0)×size)] | |||
</syntaxhighlight> | </syntaxhighlight> | ||
|Matrix of simple and nested vectors, with dynamic values. | |||
|} | |||
=== Namespaces === | |||
{| class=wikitable | |||
! Traditional method !! Array notation !! Description | |||
|- | |||
|<syntaxhighlight lang=apl>⎕NS⍬</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>()</syntaxhighlight> | |||
|Empty namespace. | |||
|- | |||
|<syntaxhighlight lang=apl>⎕NS¨⍬⍬⍬</syntaxhighlight>or<syntaxhighlight lang=apl>(⎕NS⍬)(⎕NS⍬)(⎕NS⍬)</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>()()()</syntaxhighlight> | |||
|Vector of namespaces. | |||
|- | |||
|<syntaxhighlight lang=apl>z←⎕NS⍬ | |||
z.x←'hello'</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>(x:'hello')</syntaxhighlight> | |||
|Namespace with character vector member. | |||
|- | |||
|<syntaxhighlight lang=apl>z←⎕NS⍬ | |||
z.x←⍉⍪'hello' | |||
z.x⍪← 'world'</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>(x:['hello' | |||
'world'])</syntaxhighlight> | |||
|Namespace with character matrix member. | |||
|- | |||
|<syntaxhighlight lang=apl>z←⎕NS⍬ | |||
z.y←⎕NS⍬ | |||
z.y.x←⍉⍪'hello' | |||
z.y.x⍪← 'world'</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>(y:(x:['hello' | |||
'world']))</syntaxhighlight> | |||
|Nested namespace structure with matrix member. | |||
|- | |||
|<syntaxhighlight lang=apl>z←⎕NS⍬ | |||
z.f←+ | |||
a←⎕NS⍬ | |||
a.f←- | |||
z,←a | |||
a←⎕NS⍬ | |||
a.f←× | |||
z,←a | |||
a←⎕NS⍬ | |||
a.f←÷ | |||
z←z.f</syntaxhighlight> | |||
|<syntaxhighlight lang=apl>((f:+)(f:-)(f:×)(f:÷)).f</syntaxhighlight> | |||
|[[Function array]]. | |||
|} | |||
[[File:Array notation syntax.png|thumb|right|[[wikipedia:Railroad diagram|Railroad diagram]].]] | [[File:Array notation syntax.png|thumb|right|[[wikipedia:Railroad diagram|Railroad diagram]].]] | ||
== Specification == | == Specification == | ||
The notation consists of syntax that was invalid before its introduction, thus causing no issues for [[backwards compatibility]]. The added syntax consists of three constructs that are currently [[SYNTAX ERROR]]s: | The notation consists of syntax that was invalid before its introduction, thus causing no issues for [[backwards compatibility]]. The added syntax consists of three constructs that are currently [[SYNTAX ERROR]]s: |