Subject: Re: set.lisp redefines POWERSET / {} for sets
From: Martin RUBEY
Date: Thu, 6 Mar 2003 01:28:11 +0100 (CET)
> 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