【问题标题】:operator #+ and #- in .sbclrc.sbclrc 中的运算符 #+ 和 #-
【发布时间】:2012-01-28 22:00:52
【问题描述】:

有人知道#+#- 运算符在.sbclrc 中的含义吗?我在手册中找不到。 安装 quicklisp 后,我在 .sbclrc 中看到了 #-

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

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

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

【问题讨论】:

    标签: lisp common-lisp sbcl reader-macro


    【解决方案1】:

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

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

     #ifdef __MSVC12__
     #ifndef __cplusplus__
    

    ...等等。它们从字面上隐藏了来自READer 的传入源代码位,因此它们永远不会被词法分析-解析-解释-编译-评估-实习-nada。如果您正在运行的 CL 实现缺少功能/是“错误”实现/任何标志,它们就会不复存在。

    【讨论】:

    • 你知道我在哪里可以找到这方面的文档吗?我想知道是否还有其他我不知道的 READer 功能。
    • 一般来说,任何以#开头的东西在阅读器中都是特别的;查看#下的CLHS索引,从lispworks.com/documentation/HyperSpec/Front/X_Mast_9.htm开始
    【解决方案2】:

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

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

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

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

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

    查看文档:

    一个典型的扩展是feature-case阅读器宏。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2012-11-26
      • 2011-03-11
      • 1970-01-01
      • 2020-04-20
      • 2011-03-04
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多