Copyright Digital Equipment Corp. All rights reserved.

Constructors

 An array constructor is a sequence of scalar values that is
 interpreted as a rank-one array.  The array element values are
 those specified in the sequence.  An array constructor takes the
 following form:

    (/ac-value-list/)

    ac-value-list  Is a list of one or more expressions 
                   or implied-do loops. Each ac-value must 
                   have the same type and kind type parameter.

 An implied-do loop in an array constructor takes the following
 form:

   (ac-value-expr, do-variable = expr1, expr2 [,expr3])

   ac-value-expr  Is a scalar expression evaluated for each
                  value of the d-variable to produce an array
                  element value.

   do-variable    Is the name of a scalar integer variable.  
                  Its scope is that of the implied-do loop.

   expr           Is a scalar integer expression. The expr1 
                  and expr2 specify a range of values for 
                  the loop; expr3 specifies the stride.

 The array constructor has the same type as the ac-value-list
 expressions.

 If the sequence of values specified by the array constructor is
 empty (there are no expressions or the implied-do loop produces no
 values), the rank-one array has a size of zero.

 The ac-value specifies the following:

  o  If it is a scalar expression, its value specifies an element of
     the array constructor.

  o  If it is an array expression, the values of the elements of the
     expression, in array element order, specify the corresponding
     sequence of elements of the array constructor.

  o  If it is an implied-do loop, it is expanded to form an array
     constructor value sequence under the control of the DO
     variable, as in the DO construct.


 If every expression in an array constructor is a constant
 expression, the array constructor is a constant expression.

 If an implied-do loop is contained within another implied-do loop
 (nested), they cannot have the same DO variable (do-variable).

 There are three forms for an ac-value, as follows:

   C1 = (/4,8,7,6/)                  ! A scalar expression
   C2 = (/B(I, 1:5), B(I:J, 7:9)/)   ! An array expression
   C3 = (/(I, I=1, 4)/)              ! An implied-do loop

 You can also mix these forms, for example:

   C4 = (/4, A(1:5), (I, I=1, 4), 7/)             

 To define arrays of more than one dimension, use the RESHAPE
 intrinsic function.

 The following are alternative forms for array constructors:

  o  Square brackets (instead of parentheses and slashes) to enclose
     array constructors; for example, the following two array
     constructors are equivalent:

       INTEGER C(4)
       C = (/4,8,7,6/)
       C = [4,8,7,6]

  o  A colon-separated triplet (instead of an implied-do loop) to
     specify a range of values and a stride; for example, the
     following two array constructors are equivalent:

       INTEGER D(3)
       D = (/1:5:2/)              ! Triplet form
       D = (/(I, I=1, 5, 2)/)     ! Implied-do loop form


 The following example shows an array constructor using an
 implied-do loop:

   INTEGER ARRAY_C(10)
   ARRAY_C = (/(I, I=30, 48, 2)/)

 The values of ARRAYC are the even numbers 30 through 48.

 The following example shows an array constructor of derived type
 that uses a structure constructor:

   TYPE EMPLOYEE
     INTEGER ID
     CHARACTER(LEN=30) NAME
   END TYPE EMPLOYEE
   
   TYPE(EMPLOYEE) CC_4T(4)
   CC_4T = (/EMPLOYEE(2732,"JONES"), EMPLOYEE(0217,"LEE"),     &
             EMPLOYEE(1889,"RYAN"), EMPLOYEE(4339,"EMERSON")/)

 The following example shows how the RESHAPE intrinsic function is
 used to create a multidimensional array:

   E = (/2.3, 4.7, 6.6/)
   D = RESHAPE(SOURCE = (/3.5,(/2.0,1.0/),E/), SHAPE = (/2,3/))

 D is a rank-two array with shape (2,3) containing the following
 elements:

   3.5   1.0   4.7
   2.0   2.3   6.6