运算符#+和# - 在.sbclrc中

sud*_*udo 9 lisp sbcl common-lisp reader-macro

有人知道什么#+#-运营商意味着.sbclrc什么?我在手册中找不到它.我#-.sbclrc安装quicklisp之后看到了:

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

我也在#+SBCL用户手册中看到,但我找不到其功能的解释.看起来像是加载单个模块相关的东西.

它们仅用于SBCL实施还是Common lisp的一部分?

Rai*_*wig 19

这是Common Lisp的一般功能,不仅仅是SBCL.

有一个变量cl:*features*列出了当前Lisp系统中应该存在的"特征"的符号.典型特征是:字节序,实现,子系统,处理器,扩展,Lisp方言等.

在Lisp文件中,表达式#+quicklisp(foo)表示:(foo)只有在功能quicklisp列表中存在该功能时才读取并执行*features*.

在Lisp文件中,表达式#-quicklisp(foo)表示:(foo)只有在功能quicklisp列表中不存在该功能时才读取和执行*features*.

此工具通常用于隐藏或显示某些其他Common Lisp实现的特定于实现的代码.

查看文档:


BRP*_*ock 7

他们是Common Lisp READer的一部分.这个想法是他们"隐藏"文本,除非某个特征(通常是某个CL实现)是(#+)或不是(#-)可用.

这些可能是CL概念最像C/C++的"文本宏"概念 - 从概念上和实际上,它们非常类似于类似的东西.

 #ifdef __MSVC12__
 #ifndef __cplusplus__
Run Code Online (Sandbox Code Playgroud)

......等等.它们从字面上隐藏了来自READer 的传入源代码,所以它们从不被lexed - 解析 - 解释 - 编译 - 评估 - 实习 - nada.如果您运行的CL实现缺少功能/是"错误"实现/任何标志,它们就会停止存在.

  • 一般来说,任何具有领先优势的东西都是读者特有的东西; 查看#下的CLHS索引,从http://www.lispworks.com/documentation/HyperSpec/Front/X_Mast_9.htm开始 (3认同)