4,494
edits
m (→Description) |
|||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[File:Array notation syntax.png|thumb|right|[[wikipedia:Railroad diagram|Railroad diagram]] for the array notation syntax.]] | |||
'''Array notation''' is a way to write most [[array]]s literally, with no or minimal use of [[primitive function]]s, possibly over multiple code lines. While APL has had at least simple numeric [[strand notation]] since [[APL\360]], no major APL has implemented native support for an extended notation as of 2020. | '''Array notation''' is a way to write most [[array]]s literally, with no or minimal use of [[primitive function]]s, possibly over multiple code lines. While APL has had at least simple numeric [[strand notation]] since [[APL\360]], no major APL has implemented native support for an extended notation as of 2020. | ||
Line 8: | Line 9: | ||
poss⍪← 'lnd' ((0 0)(0 0)(0 0)×size) | poss⍪← 'lnd' ((0 0)(0 0)(0 0)×size) | ||
</source> | </source> | ||
Using the array notation described in this article, the array could for example be written as: | |||
<source lang=apl> | |||
poss←['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)] | |||
</source> | |||
The array notation can also be used to express the inner vectors of vectors: | |||
<source lang=apl> | |||
poss←['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)] | |||
</source> | |||
== Description == | |||
The notation is added to the language by giving meaning to previously invalid statements. The added syntax consists of three constructs that are currently [[SYNTAX ERROR]]s: | |||
* ''broken'' round parentheses | |||
* ''broken'' square brackets | |||
* empty round parentheses: <source lang=apl inline>()</source> | |||
where ''broken'' means interrupted by one or more [[diamond]]s (<source lang=apl inline>⋄</source>) or line breaks (outside of [[dfn]]s). | |||
* A ''broken'' round parenthesis creates a [[namespace]] if every diamond/line break-separated statement is a ''name-value pair''. | |||
* A ''broken'' round parenthesis creates a [[vector]] if every diamond/line break-separated statement is a value expression. In that case, every such statement forms an [[element]] in the resulting vector. | |||
* A ''broken'' square bracket creates a an [[array]] where every diamond/line break-separated statement forms a [[major cell]] in the resulting array. | |||
* <source lang=apl inline>()</source> is equivalent to <source lang=apl inline>(⎕NS 0⍴⊂'')</source> | |||
* A ''name-value pair'' consist of a valid APL identifier, followed by a <source lang=apl inline>:</source> and a value expression. | |||
=== Formal syntax === | |||
The array notation can be described using [[wikipedia:Extended Backus–Naur form|Extended Backus–Naur form]], where an <code>expression</code> is any traditional APL expression: | |||
<pre> | |||
value ::= expression | list | block | space | |||
list ::= '(' ( ( value sep )+ value? | ( sep value )+ sep? ) ')' | |||
block ::= '[' ( ( value sep )+ value? | ( sep value )+ sep? ) ']' | |||
space ::= '(' sep? ( name ':' value ( sep name ':' value )* )? sep? ')' | |||
sep ::= [⋄#x000A#x000D#x0085]+ | |||
</pre> | |||
== History == | == History == | ||
[[File:Nested Arrays System array notation.png|thumb|right|Array notation in [[NARS]].]] | [[File:Nested Arrays System array notation.png|thumb|right|Array notation in [[NARS]].]] | ||
Line 45: | Line 85: | ||
== Design considerations == | == Design considerations == | ||
In creating the notation's specification, various alternatives were considered. | In creating the notation's specification, various alternatives were considered. The following requirements were proposed:<ref>[[Adám Brudzewsky]]. Internaldocuments. [[Dyalog Ltd.]] 30 Jun 2017.</ref> | ||
# No new [[glyph]]s | # No new [[glyph]]s | ||
# Reusing existing glyphs for similar purposes | # Reusing existing glyphs for similar purposes | ||
# Similarity to other languages ([[K]], [[wikipedia:JSON|JSON]], [[wikipedia:CSS|CSS]]) | |||
# Visual attractiveness | # Visual attractiveness | ||
# Intuitive syntax | # Intuitive syntax | ||
# As little syntactic sugar as possible | # As little [[wikipedia:syntactic sugar|syntactic sugar]] as possible | ||
=== Glyphs === | === Glyphs === |