Hi Wolfgang.
FYI
====================================================================
GCL (GNU Common Lisp) Version(2.5.0) Tue Feb 18 15:45:38 EAST 2003
Licensed under GNU Library General Public License
Contains Enhancements by W. Schelter
Use (help) to get some basic information on how to use GCL.
>(let* ((list-1 (list 'foo t))
(list-2 list-1))
(setf (getf list-1 'bar) t)
list-2)
(FOO T)
====================================================================
Cheers
Mike Thomas
| -----Original Message-----
| From: maxima-admin at www
| [mailto:maxima-admin@www.ma.utexas.edu]On Behalf Of Wolfgang Jenkner
| Sent: Wednesday, February 19, 2003 12:56 PM
| To: Maxima List
| Subject: SETF of GETF maxima bug
|
|
|
| Maxima's TRACE is broken with newer CVS versions of Clisp. This is
| due to what I think is an ANSI CL compatibility bug, which might turn
| up again elsewhere or with another Lisp implementation, so perhaps it
| is of some interest to other people, too.
|
| The following artificial example (not involving Maxima) gives the
| gist.
|
| (let* ((list-1 (list 'foo t))
| (list-2 list-1))
| (setf (getf list-1 'bar) t)
| list-2)
|
| => (FOO T) in SBCL, ECL and Clisp 2.28
|
| but
|
| => (BAR T FOO T) in the current CVS version of Clisp.
|
| I think both results conform to ANSI CL, since the HyperSpec (GETF)
| states
|
| setf of getf is permitted to either write the value of place itself,
| or modify of any part, car or cdr, of the list structure held by
| place.
|
| (In the example above, the place is the variable LIST-1, and Maxima
| behaves like it relied on SETF `writing' the value.)
|
| In any case, I think it is easy to fix the TRACE bug.
|
| MACSYMA-TRACE-SUB: Binding TEMP to some tail of FUN's MPROPS property
| (as possibly returned by MACSYMA-FSYMEVAL) is bad because the call to
| PUT-TRACE-INFO may modify it. Just bind TEMP to the CAR of the tail
| instead (the type of FUN, something like MEXPR).
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cut ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Index: mtrace.lisp
| ===================================================================
| RCS file: /cvsroot/maxima/maxima/src/mtrace.lisp,v
| retrieving revision 1.3
| diff -C2 -r1.3 mtrace.lisp
| *** mtrace.lisp 2 Jul 2002 14:17:28 -0000 1.3
| --- mtrace.lisp 18 Feb 2003 04:27:39 -0000
| ***************
| *** 219,222 ****
| --- 219,223 ----
|
| (defun macsyma-trace-sub (fun handler ilist &aux temp)
| + (declare (symbol temp)) ; pathetic
| (cond ((not (symbolp fun))
| (mtell "~%Bad arg to TRACE: ~M" fun)
| ***************
| *** 232,246 ****
| fun)
| nil)
| ! ((null (setq temp (macsyma-fsymeval fun)))
| (mtell "~%~@:M has no functional properties." fun)
| nil)
| ! ((memq (car temp) '(mmacro translated-mmacro))
| (mtell "~%~@:M is a macro, won't trace well, so use ~
| the MACROEXPAND function to debug it." fun)
| nil)
| ! ((get (car temp) 'shadow)
| ! (put-trace-info fun (car temp) ilist)
| ! (trace-fshadow fun (car temp)
| ! (make-trace-hook fun (car temp) handler))
| (list fun))
| (t
| --- 233,247 ----
| fun)
| nil)
| ! ((not (setq temp (car (macsyma-fsymeval fun))))
| (mtell "~%~@:M has no functional properties." fun)
| nil)
| ! ((memq temp '(mmacro translated-mmacro))
| (mtell "~%~@:M is a macro, won't trace well, so use ~
| the MACROEXPAND function to debug it." fun)
| nil)
| ! ((get temp 'shadow)
| ! (put-trace-info fun temp ilist)
| ! (trace-fshadow fun temp
| ! (make-trace-hook fun temp handler))
| (list fun))
| (t
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cut ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| Wolfgang
|
| _______________________________________________
| Maxima mailing list
| Maxima@www.math.utexas.edu
| http://www.math.utexas.edu/mailman/listinfo/maxima
|
|