Search code examples
lispcommon-lispsbclreader-macro

operator #+ and #- in .sbclrc


Anybody know what #+ and #- operators means in .sbclrc? I couldn't find it in the manual. I see #- in .sbclrc after I installed quicklisp:

#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))

I also see #+ in the SBCL User Manual, but I couldn't find explanation of their functionality. Looks like something related for loading individual module.

Are they only for SBCL implementation or part of Common lisp?


Solution

  • That's a general facility of Common Lisp, not only SBCL.

    There is a variable cl:*features* which lists symbols for 'features' which should be present in the Lisp system currently. Typical features are: endian, implementation, subsystems, processor, extensions, Lisp dialect and more.

    In a Lisp file the expression #+quicklisp(foo) means: read and execute (foo) only if the feature quicklisp is present in the list of features *features*.

    In a Lisp file the expression #-quicklisp(foo) means: read and execute (foo) only if the feature quicklisp is NOT present in the list of features *features*.

    This facility is often used to hide or show implementation specific code to some other Common Lisp implementation.

    See the documentation:

    A typical extension is the feature-case reader macro.