Re: set.lisp redefines POWERSET / {} for sets



> Yes.  I think that's also a good idea, if someone wants to take the
> time to figure out which routines are really separate or not.  (I
> didn't look.)

Here is a first attempt to do so, using 

http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/code/tools/xref/

To get a picture what functions of combin.lisp are used outside, do:

(load "/net/t1/rubey/.maxima/xref/xref.o")
(xref:DEFINE-CALLER-PATTERN-SYNONYMS defun (defmfun))

; find all functions in combin.lisp
(xref:xref-files "combin.lisp")
(setq lst nil)
(maphash #'(lambda (key value) (push key lst)) xref:*source-file*)


; xref doesn't like the following files. might be interesting to find out 
; why
(xref:xref-files 
 (remove-if #'(lambda (f) 
		(member f '(#p"/net/t1/rubey/maxima/src/SYS-DECLAIM.lisp"
                             #p"/net/t1/rubey/maxima/src/SYS-PROCLAIM.lisp"
			      #p"/net/t1/rubey/maxima/src/acall.lisp"
			      #p"/net/t1/rubey/maxima/src/bessel.lisp"
			      #p"/net/t1/rubey/maxima/src/cl-info.lisp"
			      #p"/net/t1/rubey/maxima/src/csimp2.lisp"
			      #p"/net/t1/rubey/maxima/src/displa.lisp"
			      #p"/net/t1/rubey/maxima/src/float.lisp"
			      #p"/net/t1/rubey/maxima/src/fortra.lisp"
			      #p"/net/t1/rubey/maxima/src/grind.lisp"
			      #p"/net/t1/rubey/maxima/src/init-cl.lisp"
			      #p"/net/t1/rubey/maxima/src/ldisp.lisp"
			      #p"/net/t1/rubey/maxima/src/macsys.lisp"
                           #p"/net/t1/rubey/maxima/src/maxima-package.lisp"
			      #p"/net/t1/rubey/maxima/src/misc.lisp"
			      #p"/net/t1/rubey/maxima/src/mlisp.lisp"
			      #p"/net/t1/rubey/maxima/src/mload.lisp"
			      #p"/net/t1/rubey/maxima/src/nparse.lisp"
			      #p"/net/t1/rubey/maxima/src/simp.lisp"
			      #p"/net/t1/rubey/maxima/src/suprv1.lisp"
			      #p"/net/t1/rubey/maxima/src/trigi.lisp")
			:test #'equal))
	    (directory "/net/t1/rubey/maxima/src/*.lisp")))

; find out which functions are called outside
(mapcan #'(lambda (symb) 
	    (let ((flist (remove "combin.lisp" 
				 (delete-duplicates 
				  (mapcar #'file-namestring
					  (xref:what-files-call symb))
				  :test #'equal)
				 :test #'equal)))
	      (when flist (list (cons symb flist)))))
	lst)

result:

((POLYDECOMP "solve.lisp") 
 ($CFEXPAND "option.lisp")
 ($CFDISREP "option.lisp") 
 (CF "residu.lisp" "hypgeo.lisp")
 ($FIB "option.lisp") 
 ($ZETA "specfn.lisp" "option.lisp" "mactex.lisp")
 ($BERNPOLY "option.lisp") 
 ($BERN "option.lisp" "hayat.lisp")
 ($FACTCOMB "option.lisp")
 (SUM "trans1.lisp" "sumcon.lisp" "spgcd.lisp" "specfn.lisp"
      "solve.lisp" "sloop.lisp" "risch.lisp" "rat3a.lisp" "pois3.lisp"
      "pois2.lisp" "plot.lisp" "numth.lisp" "nrat4.lisp" "newinv.lisp"
      "mat.lisp" "linnew.lisp" "limit.lisp" "homog.lisp" "hayat.lisp"
      "asum.lisp")
 (SIMPSUM2 "asum.lisp") 
 ($QUNIT "option.lisp")
 ($EULER "option.lisp" "hayat.lisp")
 ($MINFACTORIAL "option.lisp" "limit.lisp") 
 ($MAKEGAMMA "defint.lisp")
 ($MAKEFACT "limit.lisp" "comm.lisp")
 ($TAYTORAT "ratout.lisp" "rat3e.lisp" "nisimp.lisp" "inmis.lisp"))

well, this is only half of the story: it *seems* that some functions are 
not called at all:

(mapcan #'(lambda (symb) 
	    (let ((flist (delete-duplicates 
                           (mapcar #'file-namestring
			           (xref:what-files-call symb))
		           :test #'equal)))
	      (unless flist (list (cons symb flist)))))
	lst)

((SRRAT) (CF-CONVERGENTS-P-Q) (CFQUOT) (CFMIN) (CFDIFF) (CFPLUS)
 (SIMPPROD) (SIMPBERN) (SIMPEULER) ($POLYDECOMP))

but: 
grep -i srrat * 

shows that this is not quite so:

combin.lisp:    ((catch 'srrat (srrat e)))

or:
grep -i cfquot *
combin.lisp:  ((setq temp (assq (caar a) '((mplus . cfplus) 
                                           (mtimes . cftimes) 
                                           (mquotient . cfquot)

I don't really understand why what-files-call doesn't find these. Of 
course it doesn't find the stuff in simp.lisp, because xref cannot process 
simp.lisp at all...

OK, (setq MACHINE-MANTISSA-PRECISION nil) lets xref process simp.lisp, 
still it doesn't get SIMPPROD:

grep -i SIMPPROD *
simp.lisp: (%PLOG SIMPPLOG) (%PRODUCT SIMPPROD) (%GENFACT SIMPGFACT)

which is part of the statement
(PROG1 '(OPERATORS properties) 
      (MAPC #'(LAMBDA (X) (PUTPROP (CAR X) (CADR X) 'OPERATORS))
      ...

But its a start, I think

Martin