10

有谁知道#+#-运营商是什么意思.sbclrc?我在手册中找不到。我#-.sbclrc安装 quicklisp 后看到:

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

我也在#+SBCL 用户手册中看到,但我找不到它们的功能解释。看起来与加载单个模块有关。

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

4

2 回答 2

21

这是 Common Lisp 的通用工具,而不仅仅是 SBCL。

有一个变量cl:*features*列出了当前应该存在于 Lisp 系统中的“特征”符号。典型功能有:字节序、实现、子系统、处理器、扩展、Lisp 方言等。

在 Lisp 文件中,表达式的意思是:仅当功能存在于功能列表中时才#+quicklisp(foo)读取和执行。(foo)quicklisp*features*

在 Lisp 文件中,表达式的意思是:仅当该功能不在功能列表中时才#-quicklisp(foo)读取和执行。(foo)quicklisp*features*

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

请参阅文档:

一个典型的扩展是特征案例阅读器宏。

于 2011-12-28T08:53:11.340 回答
8

它们是 Common Lisp 的一部分READ。这个想法是他们“隐藏”文本,除非某个特性(通常是某个 CL 实现)是 ( #+) 或不 ( #-) 可用。

这些可能是最类似于“文本宏”的 C/C++ 概念的 CL 概念——在概念上和实用上,它们非常类似于类似

 #ifdef __MSVC12__
 #ifndef __cplusplus__

……等等。它们从字面上隐藏了来自READer 的传入源代码的位,因此它们永远不会被 lexed-parsed-interpreted-compiled-evaluate-interned-nada。如果您正在运行的 CL 实现缺少功能/是“错误”实现/任何标志,它们就会不复存在。

于 2011-12-28T04:08:43.803 回答