|From: Bill <[EMAIL PROTECTED]> |Date: Sun, 15 Jun 2008 02:00:53 -0400 | |I'm using CMU CL 19d and I'm trying to use Jonathan Amsterdam's Iterate |macro package, v. 1.4.3. Installation went fine, asdf and all that. My |problem is that I can't find a way to use (in the package sense) it. |When I try use-package I get collisions with the symbols ITERATE and |COLLECT. I don't care about colliding with the loop macro but I use the |CMU CL extension iterate. The macro package provides iter as a synonym |for iterate for precisely this reason. | |Is there any way I can arrange to 1) use the symbols exported from the |iterate package without qualification and at the same time 2) use |ext:iterate. CL allows you to shadow symbols when to work around problems of collision in packages. In this case you want to do a CL:SHADOWING-IMPORT of the symbol from iterates' package. Then EXT:ITERATE is available.
[I don't use condone the iterate macro, but the following example should indicate how it works. Look up SHADOW and SHADOWING-IMPORT in the spec. Note DEFPACKAGE also allows you to specify how symbols can be shadowed.] * (describe 'iterate) ITERATE is an external symbol in the EXTENSIONS package. Macro-function: #<Byte function (:MACRO ITERATE) {280C0EF1}> Macro documentation: Iterate Name ({(Var Initial-Value)}*) Declaration* Form* This is syntactic sugar for Labels. It creates a local function Name with the specified Vars as its arguments and the Declarations and Forms as its body. This function is then called with the Initial-Values, and the result of the call is return from the macro. On Wednesday, 4/2/08 10:51:38 am MDT it was compiled from: target:code/extensions.lisp Created: Sunday, 10/5/03 05:41:22 am MDT Comment: $Header: /project/cmucl/cvsroot/src/code/extensions.lisp,v 1.28 2003/10/05 11:41:22 gerd Exp $ * (defpackage "FOO" (:export "ITERATE")) #<The FOO package, 0/8 internal, 1/2 external> * (shadowing-import '(foo:iterate)) T * (describe 'iterate) ITERATE is an external symbol in the FOO package. -- Madhu