Prototype: Difference between revisions

Jump to navigation Jump to search
1,268 bytes added ,  05:49, 9 June 2020
m
Text replacement - " ⊢( *[^∘])" to " ⎕←$1"
Miraheze>Marshall
m (Text replacement - " ⊢( *[^∘])" to " ⎕←$1")
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
In the [[nested array model]], an array's prototype is an array which gives information about the type and structure of its [[Element|elements]]. It is derived from the first element of the array in [[ravel order]], or, if the array is [[Empty array|empty]], from information stored alongside the array (usually this information is just the prototype itself). An array's prototype is used as a [[fill element]] for operations involving that array.
The '''prototype''' of an array is, in the [[nested array model]], an array which gives information about the type and structure of its [[element]]s. It is derived from the first element of the array in [[ravel order]], or, if the array is [[Empty array|empty]], from information stored alongside the array (usually this information is just the prototype itself). An array's prototype is used as a [[fill element]] for operations involving that array, and to determine some [[identity element]]s.
 
APLs with a [[flat array model]] do not typically store prototype information, instead using only the array's type ([[character]], [[numeric]], or [[Box|boxed]]) to determine its [[Fill element|fills]].


== Examples ==
== Examples ==
Line 24: Line 22:
An array's prototype is based on its first element, so the array <source lang=apl inline>a</source> below has a simple numeric prototype, as does any prefix of <source lang=apl inline>a</source>. This property even applies to empty arrays: the expression <source lang=apl inline>0 ↑ a</source> results in an empty array with the same prototype as <source lang=apl inline>a</source>.  
An array's prototype is based on its first element, so the array <source lang=apl inline>a</source> below has a simple numeric prototype, as does any prefix of <source lang=apl inline>a</source>. This property even applies to empty arrays: the expression <source lang=apl inline>0 ↑ a</source> results in an empty array with the same prototype as <source lang=apl inline>a</source>.  
<source lang=apl>
<source lang=apl>
       ⊢a ← 5 'c' ¯2
       ⎕←a ← 5 'c' ¯2
5 c ¯2
5 c ¯2
       4 ↑ a
       4 ↑ a
Line 37: Line 35:
The prototype of an array may be [[nested]]. Here, we inspect the prototype of an array containing both character and numeric data. In the prototype, all characters are converted to spaces and all numbers to zeros. Thus the prototype retains type and structure information but not specific values.
The prototype of an array may be [[nested]]. Here, we inspect the prototype of an array containing both character and numeric data. In the prototype, all characters are converted to spaces and all numbers to zeros. Thus the prototype retains type and structure information but not specific values.
<source lang=apl>
<source lang=apl>
       ⊢x ← ⊂'de'(3 4 5)  ⍝ A complicated scalar array
       ⎕←x ← ⊂'de'(3 4 5)  ⍝ A complicated scalar array
┌──────────┐
┌──────────┐
│┌──┬─────┐│
│┌──┬─────┐│
Line 56: Line 54:
</source>
</source>
{{Works in|[[Dyalog APL]]}}
{{Works in|[[Dyalog APL]]}}
== Support ==
A few dialects have [[Type]] as a [[primitive function]], and in those, the prototype is simply the type of the first element:
<source lang=apl>
      ⊤↑ (1 2 'ab') 3 4
┌─┬─┬──┐
│0│0│  │
└─┴─┴──┘
</source>
{{Works in|[[NARS2000]]}}
<source lang=apl>
      ∊⊃ (1 2 'ab') 3 4
┌─┬─┬──┐
│0│0│  │
└─┴─┴──┘
</source>
{{Works in|[[Dyalog APL]] with [[migration level]]<nowiki>=</nowiki>0}}
However, an array's prototype can always be determined by reshaping the array to become empty, and then coercing out a fill element:
<source lang=apl>
      ⊃ 0 ⍴ (1 2 'ab') 3 4
┌─┬─┬──┐
│0│0│  │
└─┴─┴──┘
</source>
{{Works in|[[Dyalog APL]] with [[migration level]]<nowiki>≥</nowiki>2, [[APL2]], [[APLX]]}}
[https://tryapl.org/?a=%u2283%200%20%u2374%20%281%202%20%27ab%27%29%203%204&run Try it now!]
<source lang=apl>
      ⊃ 0 ⍴ (1 2 'ab') 3 4
┌─┬─┬──┐
│0│0│  │
└─┴─┴──┘
</source>
{{Works in|[[Dyalog APL]] with [[migration level]]<nowiki>=</nowiki>1}}
APLs with a [[flat array model]] do not typically store prototype information, instead using only the array's type ([[character]], [[numeric]], or [[Box|boxed]]) to determine its [[Fill element|fills]].
{{APL features}}[[Category:Array relationships]][[Category:Array characteristics]]

Navigation menu