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. ----------
