HELP NEWARRAY updated Mark Rubinstein October 1985
A. Sloman April 1989
See HELP * ARRAYS for an introduction to arrays in POP-11.
newarrary(<boundslist>) -> <array>
newarrary(<boundslist>, <initial value>) -> <array>
newarrary(<boundslist>, <initialising procedure>) -> <array>
The simplest way to create an array in POP-11 is to use NEWARRAY, which
creates an array capable of holding any POPLOG data-types.
newarray(<boundslist>, <initial value>) -> <array>
E.g.
newarray([1 5 1 10], 0) -> aa;
creates a two dimensional 5 by 10 array each of whose elements is 0.
The elements of the array are accessed or updated using two integers
the first in the range 1 to 5, the second in the range 1 to 10, as
specified in the <boundslist> argument. The syntax used is the same as
if the array were a procedure (which in fact it is in POP-11). So:
aa(3,5) =>
** 0
66 -> aa(3,5);
aa(3,5) =>
** 66
[a list ] -> aa(4,2);
aa(4,2) =>
** [a list]
NB: the second argument of NEWARRAY mus not be a list as it will
then be taken to be the <boundslist>. See the use of initialising
procedures below.
If the second argument is missing, it defaults to the word "undef".
newarray([1 10 1 10]) -> aa;
This creates a ten by ten array, both of whose subscripts vary in the
range one to ten, all the elements being undef. (See HELP *UNDEF)
aa(5,5) =>
** undef
newarray([-5 15])
Creates a one dimensional array whose subscript varies in the range
-5 to 15.
Instead of an initial value, the second argument to NEWARRAY may be a
procedure which computes the value on the basis of the subscripts. The
procedure must take as many arguments as the dimensions of the arrary.
Thus, to create a 3 by 5 array whose elements are the product of the
susbcripts do:
newarray([1 3 1 5], nonop *) -> aa;
Then:
aa(2,5) =>
** 10
aa(3,2) =>
** 6
Or to create an array containing a list of the subscripts:
newarray([-5 5 -10 10], procedure(x,y); [^x ^y] endprocedure) -> aa;
aa(-3,5) =>
** [-3 5]
There is a more powerful procedure *NEWANYARRAY that can be used to
create 'packed' arrays corresponding to any vector data-type, e.g. it
could create a compact array of bits, or of 4 bit integers. NEWARRAY
coudl have been defined in terms of it thus:
vars newarray;
newanyarray(%initv, subscrv%) -> newarray;
See HELP * NEWANYARRAY for details on setting up initial component values.
See
REF * DATA - POP-11 data types and accessing procedures
REF * KEYS - data keys associated with a data class
REF * VECTORS - VECTOR types in POP-11
HELP * VECTORCLASS - Defining new vector types
HELP * CLASSES - classes and procedures associated with a class
See also HELP * BOUNDSLIST, *ARRAYVECTOR, *ISARRAY
--- C.all/help/newarray
--- Copyright University of Sussex 1989. All rights reserved. ----------Author: updated Mark Rubinstein October 1985