Procedures and Functions  113  1l.A.3 Recursive procedures  Conformant arrays specify the actual bounds of each dimension of  the array as bound identifiers which are a kind of read-only variable.  The index type of the actual array parameter must be compatible with  the type in  the  conform ant array's index type  specification. The  smallest and largest values of that index type must lie within the closed  interval of the type in the index type specification. The component  types  must  be  the  same,  and  if the  component  type  of the  conformant-array parameter is another conformant-array parameter  then the component type of the actual array parameter must conform to  it.  A conformant-array parameter may be packed only in its last  dimension. Actual parameters to value conformant-array parameters  may be variables or strings.  Program  MatrixMul of Chapter 6 is rewritten as Program 11.4 to  use  conformant-array  parameters.  Program  11. 7  passes  different-length strings to a formal conformant-array parameter.  The use of a procedure identifier within the text of the procedure itself  implies  recursive  execution  of the  procedure.  Problems  whose  definition is naturally recursive, often lend themselves to recursive  solutions. An example is Program 11.5.  The task is to construct a program to convert expressions into  postfix  form  (Polish  notation).  This  is  done  by  constructing  an  individual  conversion  procedure  for  each  syntactic  construct  (expression, term, factor). As these syntactic constructs are defined  recursively, their corresponding procedures may activate themselves  recursively.  Given as data are the symbolic expressions:  (a+b) * (c-d)  a+b*c-d  a  *  b)*  c-d  a+b* (c-d)  a * a * a * a  b+c*(d+c*a*a)*b+a 