From: Randolph U. <udo...@us...> - 2004-11-12 03:01:31
|
hello (find-symbol "A" "") fails because it cannot find package named "". however, in clisp and ACL it works.. this search is performed by slime to get info when "(:a" is typed. with best regards, Alex 'killer_storm' Mizrahi. |
From: Alex M. <udo...@us...> - 2004-11-12 03:28:03
|
(message (Hello 'Randolph) (you :wrote :to '(All) :on '(Fri, 12 Nov 2004 04:19:47 +0200)) ( AM> (find-symbol "A" "") fails because it cannot find package named "". AM> however, in clisp and ACL it works.. and by the way, is it ok that when i redefine find-symbol: CL-USER> (in-package :common-lisp) #<PACKAGE "COMMON-LISP"> CL> (setq *old-find-symbol* (function find-symbol)) #<FUNCTION FIND-SYMBOL> CL> (defun find-symbol (sym &optional package) (if package (progn (if (equal package "") (setq package "KEYWORD")) (funcall *old-find-symbol* sym package)) (funcall *old-find-symbol* sym))) FIND-SYMBOL it appears to be working right from top-level: CL> (in-package :cl-user) #<PACKAGE "COMMON-LISP-USER"> CL-USER> (find-symbol "A" "") :A :EXTERNAL but functions in compiled swank still use old version of find-symbol? 30: (INVOKE-DEBUGGER #<PACKAGE-ERROR {16C6DA9}>) 31: (FIND-SYMBOL "A" "") 32: (SWANK::PARSE-SYMBOL ":a") ) (With-best-regards '(Alex Mizrahi) :aka 'killer_storm) (prin1 "Jane dates only Lisp programmers")) |
From: Peter G. <pe...@ar...> - 2004-11-12 13:00:07
|
On Fri, 12 Nov 2004 at 05:27:55 +0200, Alex Mizrahi wrote: > and by the way, is it ok that when i redefine find-symbol: > > CL-USER> (in-package :common-lisp) > #<PACKAGE "COMMON-LISP"> > CL> (setq *old-find-symbol* (function find-symbol)) > #<FUNCTION FIND-SYMBOL> > CL> (defun find-symbol (sym &optional package) > (if package > (progn > (if (equal package "") (setq package "KEYWORD")) > (funcall *old-find-symbol* sym package)) > (funcall *old-find-symbol* sym))) > > FIND-SYMBOL > > it appears to be working right from top-level: > > CL> (in-package :cl-user) > #<PACKAGE "COMMON-LISP-USER"> > CL-USER> (find-symbol "A" "") > :A > :EXTERNAL > > but functions in compiled swank still use old version of find-symbol? According to section 11.1.2.1.2, the consequences are undefined if you redefine a function named by an external symbol in the CL package, so this behavior is in fact OK. It might be nice if this worked the way you expected at some very low level of compiler optimization (or high level of safety), but currently ABCL's compiler doesn't make such fine distinctions (and you probably wouldn't get a swank compiled that way by default in any case). -Peter |
From: Peter G. <pe...@ar...> - 2004-11-12 12:49:45
|
On Fri, 12 Nov 2004 at 04:19:47 +0200, Randolph Udodenko wrote: > (find-symbol "A" "") fails because it cannot find package named "". > however, in clisp and ACL it works.. This behavior does not appear to be required by the standard, and it doesn't work in the CLISP I have here (built from CVS a couple of weeks ago), nor in SBCL or CMUCL. > this search is performed by slime to get info when "(:a" is typed. If this is really a problem, it seems like slime is relying on undefined behavior and should be fixed. But with slime from CVS, after (defun :foo (x) (+ x x)) slime does find the arglist correctly when I type "(:foo ". Or am I missing the point? -Peter |
From: Adam W. <li...@co...> - 2004-11-13 04:22:44
|
Hi Randolph and Peter, > On Fri, 12 Nov 2004 at 04:19:47 +0200, Randolph Udodenko wrote: >> (find-symbol "A" "") fails because it cannot find package named "". >> however, in clisp and ACL it works.. > > This behavior does not appear to be required by the standard Correct. "" is the package designator for the package with the name "". This package is probably not currently defined. One could define the package first: (unless (find-package "") (make-package "" :use '())) And then (find-symbol "A" "") will return {nil, nil}. The CLHS even contains an examples of creating the package first using make-package: (find-symbol "NIL" (prog1 (make-package "JUST-TESTING" :use '()) (intern "NIL" "JUST-TESTING"))) Regards, Adam |
From: Alex M. <udo...@us...> - 2004-11-13 12:05:36
|
(message (Hello 'Adam) (you :wrote :on '(Sat, 13 Nov 2004 17:22:35 +1300)) ( >> This behavior does not appear to be required by the standard AW> Correct. "" is the package designator for the package with the name AW> "". AW> This package is probably not currently defined. AW> One could define the package first: AW> (unless (find-package "") (make-package "" :use '())) really question is if (find-package "") should return #<PACKAGE KEYWORD> ) (With-best-regards '(Alex Mizrahi) :aka 'killer_storm) (prin1 "Jane dates only Lisp programmers")) |
From: Peter G. <pe...@ar...> - 2004-11-13 13:59:54
|
On Sat, 13 Nov 2004 at 14:05:26 +0200, Alex Mizrahi wrote: > really question is if (find-package "") should return #<PACKAGE KEYWORD> Right. And I think the answer is that it should not. -Peter |
From: Adam W. <li...@co...> - 2004-11-13 23:56:34
|
Hi Alex Mizrahi, > AW> One could define the package first: > AW> (unless (find-package "") (make-package "" :use '())) > > really question is if (find-package "") should return #<PACKAGE KEYWORD> We know (find-package "KEYWORD") will return the keyword package. So the only way (find-package "") could also return the keyword package is if "" denotes a nickname for the keyword package. ANSI Common Lisp defines no nickname for the keyword package. Therefore you cannot use (find-package "") to return the keyword package in portable code. 11.1.2 Standardized Packages This section describes the packages that are available in every conforming implementation. A summary of the names and nicknames of those standardized packages is given in the next figure. Name Nicknames COMMON-LISP CL COMMON-LISP-USER CL-USER KEYWORD none Figure 11-2. Standardized Package Names Regards, Adam |
From: Alex M. <udo...@us...> - 2004-11-13 12:19:14
|
(message (Hello 'Peter) (you :wrote :on '(Fri, 12 Nov 2004 04:49:35 -0800)) ( PG> On Fri, 12 Nov 2004 at 04:19:47 +0200, Randolph Udodenko wrote: >> (find-symbol "A" "") fails because it cannot find package named "". >> however, in clisp and ACL it works.. PG> This behavior does not appear to be required by the standard, and it PG> doesn't work in the CLISP I have here strange, in version 2.33.1 (find-package "") returned KEYWORD package.. PG> slime does find the arglist correctly when I type "(:foo ". it appears to be working with newer slime. ) (With-best-regards '(Alex Mizrahi) :aka 'killer_storm) (prin1 "Jane dates only Lisp programmers")) |