On Wed, Dec 30, 2009 at 7:18 AM, Peter Olsen <pcolsen@gmail.com> wrote:
I'm writing to ask how to redefine the "or" macro in ABCL. I'm working on a project and there's one package in which I need "or" to mean something else than its usual definition. I've tried simply to redefine it, but it doesn't work. I understand that the Common Lisp spec requires special provision for that to be done --- such as the package-lock construct in SBCL. How can I do that in ABCL? I want to be able to do this within the code, for example, with in a "let" so that I can bound its scope. Can anyone point me in the right direction? My first --- failed --- experiment is below.
In addition to what Erik said, if you need you own OR to be effective only in your package, you can use your-package:or instead of common-lisp:or to name your macro, for example: (defpackage :my-package (:use :common-lisp) (:shadow #:or) (:export ...)) then, start your source files with (in-package :my-package) and in one of them put (defmacro or ...) ;the symbol is my-package:or, not common-lisp:or Of course, this way your macro will only get used by your own code (and code that imports the symbol OR from your package); it won't affect other libraries or the system itself, so it's not equivalent to Erik's advice. This solution has the advantage of being portable Common Lisp. hth, Alessio