\section{PROD Product Function}

\subsection{Usage}

Computes the product of an array along a given dimension.  The general
syntax for its use is
\begin{verbatim}
   y = prod(x,d)
\end{verbatim}
where \verb|x| is an \verb|n|-dimensions array of numerical type.
The output is of the same numerical type as the input, except 
for integer types, which are automatically promoted to \verb|int32|.
 The argument \verb|d| is optional, and denotes the dimension along 
which to take the product.  The output is computed via
\[
  y(m_1,\ldots,m_{d-1},1,m_{d+1},\ldots,m_{p}) = 
    \prod_{k} x(m_1,\ldots,m_{d-1},k,m_{d+1},\ldots,m_{p})
\]
If \verb|d| is omitted, then the product is taken along the 
first non-singleton dimension of \verb|x|. Note that by definition
(starting with FreeMat 2.1) \verb|prod([]) = 1|.
\subsection{Example}

The following piece of code demonstrates various uses of the product
function
\begin{verbatim}
--> A = [5,1,3;3,2,1;0,3,1]
A = 
  <int32>  - size: [3 3]
 
Columns 1 to 3
 5  1  3  
 3  2  1  
 0  3  1  

\end{verbatim}
We start by calling \verb|prod| without a dimension argument, in which case it defaults to the first nonsingular dimension (in this case, along the columns or \verb|d = 1|).
\begin{verbatim}
--> prod(A)
ans = 
  <double>  - size: [1 3]
 
Columns 1 to 3
 0  6  3  

\end{verbatim}
Next, we take the product along the rows.
\begin{verbatim}
--> prod(A,2)
ans = 
  <double>  - size: [3 1]
 
Columns 1 to 1
 15  
  6  
  0  

\end{verbatim}
