extending limit



I know little to nothing about the limit code; nevertheless, how about:

(setf (get '%signum 'simplim%function) 'simplim%signum)

(defun simplim%signum (e x pt)
  (let ((sgn))
    (setq e (limit (cadr e) x pt 'think))
    (setq sgn ($csign e))
   (cond ((eq sgn '$zero) '$ind)
          ((memq sgn '($neg $pn $pos))
           (take '(%signum) e)) ;; OK, this does sign(e) twice,...
          (t  (throw 'limit ())))))

Examples:

(%i2) limit(signum(x^2-3),x,5);
(%o2) 1

(%i3) limit(signum(x),x,a);
(%o3) 'limit(signum(x+a),x,0)

(%i4) assume(a > 0);
(%o4) [a > 0]

(%i5) limit(signum(x),x,a);
(%o5) 1

(%i6) limit(signum(x^3-1),x,inf);
(%o6) 1

 
(%i7) limit(signum(x^3-7),x,minf);
(%o7) -1

(%i8) limit(x * signum(x),x,0);
(%o8) 0

Barton