You'll get correct results doing it this way -

(with-input-from-string (s "(defmacro test (&body body) á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á
á á á á á á(let ((obj (gensym))) á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á áá
á á á á á á á`(let (,obj) á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á
á á á á á á á á (setq ,obj (list ,@body)) á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á á
á á á á á á á á ,obj)))")
á á á á á á(eval (with-input-from-string
á á á á á á á á á á(s (write-to-string (read s) :pretty nil :readably t))
á á á á á á á á á á(read s))))




On Fri, Oct 11, 2013 at 4:27 AM, Didier Verna <didier@lrde.epita.fr> wrote:

á Hi,

on second thought, I'm forwarding this to sbcl-devel because I think
this might be a bug. The same scenario works fine with CCL. CMUCL gives
a note and a warning but still works:

CL-USER> (test 'a 'b)
; In: TEST 'A

; á (TEST 'A 'B)
; ==>
; á (LET (#)
; á á (SETQ #:G0 #)
; á á #:G0)
; Note: Variable LISP::BACKQ-COMMA defined but never used.
; ;

; Warning: These variables are undefined:
; á #:G0 OBJ
; (A B)

The macroepansion is however similar to that of SBCL:

CL-USER> (macroexpand '(test 'a 'b))
(LET ((LISP::BACKQ-COMMA OBJ))
á (SETQ #:G4368 (LIST 'A 'B))
á #:G4368)
T






---------- Forwarded message ----------
From:áDidier Verna <didier@lrde.epita.fr>
To:áSBCL Help <sbcl-help@lists.sourceforge.net>
Cc:á
Date:áFri, 11 Oct 2013 09:14:06 +0200
Subject:ámultiple string reads/writes of SB-IMPL::BAKQ-COMMA

á Hello,

the backquote syntax gives me a problem when doing multiple (in fact 2)
reads and writes of an expression. Consider this:

CL-USER> (defmacro test (&body body)
á á á á á á(let ((obj (gensym)))
á á á á á á á`(let (,obj)
á á á á á á á á (setq ,obj (list ,@body))
á á á á á á á á ,obj)))
TEST
CL-USER> (test 'foo 'bar)
(FOO BAR)


CL-USER> (with-input-from-string (s "(defmacro test (&body body)
á á á á á á(let ((obj (gensym)))
á á á á á á á`(let (,obj)
á á á á á á á á (setq ,obj (list ,@body))
á á á á á á á á ,obj)))")
á á á á á á(eval (read s)))
STYLE-WARNING: redefining COMMON-LISP-USER::TEST in DEFMACRO
TEST
CL-USER> (test 'foo 'bar)
(FOO BAR)

;; Okay, but then...


CL-USER> (with-input-from-string (s "(defmacro test (&body body)
á á á á á á(let ((obj (gensym)))
á á á á á á á`(let (,obj)
á á á á á á á á (setq ,obj (list ,@body))
á á á á á á á á ,obj)))")
á á á á á á(eval (with-input-from-string (s (prin1-to-string (read s)))
á á á á á á á á á á(read s))))
STYLE-WARNING: redefining COMMON-LISP-USER::TEST in DEFMACRO
TEST
CL-USER> (test 'foo 'bar)
; in: TEST 'FOO
; á á (LET ((SB-IMPL::BACKQ-COMMA OBJ))
; á á á (SETQ #:G2191 (LIST 'FOO 'BAR))
; á á á #:G2191)
;
; caught STYLE-WARNING:
; á The variable SB-IMPL::BACKQ-COMMA is defined but never used.

; á á (SETQ #:G2191 (LIST 'FOO 'BAR))
;
; caught WARNING:
; á undefined variable: #:G2191


and it breaks. What happens is that in the first case, SBCL understands
that (SB-IMPL::BACKQ-COMMA OBJ) really means ,obj in the let form, but
if I read this expression, write it to a string and read it again for
evaluation, then it thinks that I'm trying to bind SB-IMPL::BACKQ-COMMA
to OBJ...


How can I avoid this behavior ?


Thanks !

--
Resistance is futile. You will be jazzimilated.

Lisp, Jazz, A´kido: http://www.didierverna.info



--
Resistance is futile. You will be jazzimilated.

Lisp, Jazz, A´kido: http://www.didierverna.info

------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
Sbcl-devel mailing list
Sbcl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-devel