Great, I'm going to try to modify it. Where is pp defined? I tried grepping through the scm files, but I see only calls to pp and not it's definition.<br><br>Thanks!<br><br>
<div class="gmail_quote">On Tue, Feb 10, 2009 at 5:50 AM, Marc Feeley <span dir="ltr"><<a href="mailto:feeley@iro.umontreal.ca" target="_blank">feeley@iro.umontreal.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div><div></div><div><br>
On 10-Feb-09, at 3:18 AM, lowly coder wrote:<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Session: ---<br>
<br>
~/dynamic$ cat t2.scm<br>
(define-macro (assert-equal lhs rhs)<br>
  (let ((g-lhs (gensym))<br>
        (g-rhs (gensym))<br>
        (e-lhs (gensym))<br>
        (e-rhs (gensym)))<br>
    `(let ((,g-lhs ,lhs) (,g-rhs ,rhs)<br>
           (,e-lhs ',lhs) (,e-rhs ',rhs))<br>
       (if (not (equal? ,g-lhs ,g-rhs))<br>
           (pp `(,,e-lhs = ,,g-lhs <> ,,g-rhs = ,,e-rhs))))))<br>
<br>
(pp (lambda ()<br>
      (assert-equal (+ 1 2) (- 3 4))) (current-output-port))<br>
<br>
~/dynamic$ gsi t2.scm<br>
(lambda ()<br>
  (let ((#:g0 (+ 1 2)) (#:g1 (- 3 4)) (#:g2 '(+ 1 2)) (#:g3 '(- 3 4)))<br>
    (if (not (equal? #:g0 #:g1))<br>
        (pp `(,#:g2<br>
              ,@`<br>
(,'= ,@`(,#:g0 ,@`(,'<> ,@`(,#:g1 ,@`(,'= ,@`(,#:g3 ,@'())))))))))))<br>
~/dynamic$<br>
<br>
<br>
Question: ---<br>
<br>
Why do I have:<br>
<br>
  (pp `(,#:g2<br>
              ,@`<br>
(,'= ,@`(,#:g0 ,@`(,'<> ,@`(,#:g1 ,@`(,'= ,@`(,#:g3 ,@'())))))))))))<br>
<br>
?<br>
<br>
It seems prettier as:<br>
<br>
`(,#:g2 '= ,#:g0 '<> ...)<br>
<br>
the ,@` seems extraneous<br>
</blockquote>
<br>
<br></div></div>
The interpreter does a very simple form of compilation of the source code to an AST (Abstract Syntax Tree).  What pp is showing you is the AST of your code.  pp is not being very smart at prettifying the AST of quasiquotes.  It shouldn't be too hard to add a rule such that `(X ,@`(Y...)) is turned into `(X Y...).<br>

<font color="#888888">
<br>
Marc<br>
<br>
</font></blockquote></div><br>