Integral of the hypergeometric function



The following code allows maxima to integrate the hypergeometric function.
hypergeometric([a1,...,ap],[b1,...,bq],z).  It is added to
share/hypergeometric/hypergeometric.lisp.

At present it returns a "Division by 0" error if any of ai are equal to one.
Is this too harsh?  I really don't see the value in giving a different 
error message.

######

(defun hyp-integral-3 (a b z)
  "Integral of hypergeometric(a,b,z) wrt z"
  (let ((a-1 (add a -1))
        (b-1 (add b -1)))
    (mul (reduce #'mul (margs b-1))
         (inv (reduce #'mul (margs a-1)))
         (take '($hypergeometric) a-1 b-1 z))))

;;Integral of hypergeometric(a,b,z).  Only defined for third arg z.
(putprop '$hypergeometric `((a b z) nil nil ,#'hyp-integral-3) 'integral)

#####

(%i1) integrate(hypergeometric([],[2],z),z);
(%o1)                     hypergeometric([], [1], z)
(%i2) integrate(hypergeometric([i,j],[3],z),z);
                   2 hypergeometric([i - 1, j - 1], [2], z)
(%o2)              ----------------------------------------
                               (i - 1) (j - 1)
(%i3) integrate(hypergeometric([1],[2],z),z);

Division by 0
 -- an error. To debug this try: debugmode(true);