[Openmcl-devel] eval-in-package
    Taoufik Dachraoui 
    taoufik.dachraoui at wanadoo.fr
       
    Mon Jun  1 13:31:20 PDT 2009
    
    
  
Hi
I wrote 2 functions slightly different to evaluate a lisp body in a  
given package
one is wrong and the other is correct at least for the test I run).
The problem I could not understand why this is so, both functions  
looks correct
as far as I can tell;
(make-package 'here)
(make-package 'there)
(in-package 'here)
(defun eval-in-package-1 (pkg) ; wrong
   (let ((req (read))
	(*package* (find-package pkg)))
     (eval (read-from-string (format nil "~S" req)))))
(defun eval-in-package-2 (pkg)  ; correct
   (let ((req (format nil "~S" (read)))
	(*package* (find-package pkg)))
     (eval (read-from-string req))))
? (eval-in-package-1 'there)
(setq a 1)
1
?
? (eval-in-package-2 'there)
(setq b 1)
1
?
? here::a								;;;;;;;;;; wrong; a must be defined in package there
1
? here::b								;;;;; this correct, b is defined in package there
 > Error: Unbound variable: B
 > While executing: CCL::TOPLEVEL-EVAL, in process listener(1).
 > Type :GO to continue, :POP to abort, :R for a list of available  
restarts.
 > If continued: Retry getting the value of B.
 > Type :? for other options.
1 > :pop
? there::a									
 > Error: Unbound variable: THERE::A
 > While executing: CCL::TOPLEVEL-EVAL, in process listener(1).
 > Type :GO to continue, :POP to abort, :R for a list of available  
restarts.
 > If continued: Retry getting the value of THERE::A.
 > Type :? for other options.
1 > :pop
? there::b				;; correct
1
?
Kind regards
-Taoufik
    
    
More information about the Openmcl-devel
mailing list