<div dir="ltr">yes it was a mistake I rewrote the macro as follows<div><br></div><div><div>(defmacro with-package ((&rest names) &body body)</div><div>  `(progn</div><div>     (use ,@names)</div><div>     (let ((results (multiple-value-list (progn ,@body))))</div>
<div>       (unuse ,@(reverse names))</div><div>       (values-list results))))</div></div><div><br></div><div><br></div><div><span class="" style="font-family:arial,sans-serif;font-size:13px"><div class="im" style="color:rgb(80,0,80)">
<span class="" style="color:rgb(34,34,34);font-family:arial;font-size:small"><div>but your solution looks much better (deals with errors in body)</div></span><div class="im" style="color:rgb(80,0,80)"><br></div>(defmacro with-package ((&rest names) &body body)<br>
 `(progn<br>    (use ,@names)<br></div>    (unwind-protect (progn ,@body)<br>      (unuse ,@(reverse names)))))<br></span></div><div><span class="" style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div>
<span class="" style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><br></div><div>Taoufik</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Jan 12, 2013 at 4:27 PM, Greg Pfeil <span dir="ltr"><<a href="mailto:greg@clozure.com" target="_blank">greg@clozure.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 12 Jan 2013, at 7:48, Taoufik Dachraoui <<a href="mailto:dachraoui.taoufik@gmail.com">dachraoui.taoufik@gmail.com</a>> wrote:<br>

<br>
> Now, I wanted to define with-package<br>
><br>
> (defmacro with-package ((&rest names) &body body)<br>
>  `(progn<br>
>     (use ,@names)<br>
>     ,@body<br>
>     (unuse ,@(reverse names))))<br>
><br>
><br>
> But the problem when I use with-package as follows:<br>
><br>
> ? *package*<br>
> #<Package "COMMON-LISP-USER"><br>
> ?  (with-package (calculus) (share 3))<br>
> NIL  ;;; I did not use CALCULUS::SHARE<br>
> ? (share 3)<br>
> 4<br>
> ?<br>
<br>
</div>This is probably secondary to the problem you are running into, but shouldn't your macro look more like:<br>
<div class="im"><br>
(defmacro with-package ((&rest names) &body body)<br>
 `(progn<br>
    (use ,@names)<br>
</div>    (unwind-protect (progn ,@body)<br>
      (unuse ,@(reverse names)))))<br>
<br>
So that 1) the result of the form is the result of BODY and 2) if BODY errors, your package still gets cleaned up.</blockquote></div><br></div>