Prototypes and Fill Items
Every array has an associated prototype which is derived from the array's first item.
If the first item is a number, the prototype is 0. Otherwise, if the first item is a character, the prototype is ' '
(space). Otherwise, if the first item is a (ref to) an instance of a Class, the prototype is a ref to that Class.
Otherwise (in the nested case, when the first item is other than a simple scalar), the prototype is defined recursively as the prototype of each of the array's first item.
Examples
Array | Prototype |
---|---|
1 2 3.4 |
0 |
2 3 5⍴'hello' |
' ' |
99 'b' 66 |
0 |
(1 2)(3 4 5) |
0 0 |
((1 2)3)(4 5 6) |
(0 0)0 |
'hello' 'world' |
' ' |
⎕NEW MyClass |
MyClass |
(88(⎕NEW MyClass)'X')7 |
0 MyClass ' ' |
Fill Items
Fill items for an overtake operation, are derived from the argument's prototype. For each 0
or ' '
in the prototype, there is a corresponding 0
or ' '
in the fill item and for each class reference in the prototype, there is a ref to a (newly constructed and distinct) instance of that class that is initialised by the niladic (default) constructor for that class, if defined.
Examples
4↑1 2
1 2 0 0
4↑'ab'
ab
4↑(1 2)(3 4 5)
1 2 3 4 5 0 0 0 0
2↑⎕NEW MyClass
#.[Instance of MyClass] #.[Instance of MyClass]
In the last example, two distinct instances are constructed (the first by ⎕NEW
and the second by the overtake).
Fill items are used in a number of operations including:
- First (
⊃
or↑
) of an empty array - Fill-elements for overtake
- For use with the Each operator on an empty array