From: Bruno H. <ha...@il...> - 2000-02-11 14:51:22
|
Marco Antoniotti writes: > > (eval-when (compile load eval) (unless (find-package "MAKE") ...)) > > > > I can load the file, but I cannot compile it. > > any ideas? > > Nope. It seems like a CLisp problem. Nope. The problem is the (unless (find-package "MAKE") (make-package ...)) code. It is pre-CLtL1 code and has a lot of portability problems. Which is why IN-PACKAGE and DEFPACKAGE are introduced in CLtL2 and ANSI CL. More in detail. Once upon a time, there were many packages using an unprotected (make-package ...) or (unless (find-package "MAKE") (make-package ...)) call at top level. In order to compile them correctly, clisp executes any MAKE-PACKAGE form with constant arguments at compile time. Now, you wrap the thing in eval-when, whence clisp will at compile-time execute the form (unless (find-package "MAKE") (make-package ...)) followed by (make-package ...) The latter gives the error message. This entire find-package/make-package/use-package/etc. stuff was recognized to be so messy 8 years ago that they added DEFPACKAGE to the language. Please use it. The right way to make a package declaration is thus (defpackage "MAKE" ...<lots of nicknames and other options>) (in-package "MAKE") ; or (in-package :MAKE) In the latter in-package form, be sure to give a self-evaluating argument. CLtL1 in-package evaluates its argument, CLtL2 in-package does not. Bruno |