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实现的特定于实现的代码.
查看文档:
他们是Common Lisp READer的一部分.这个想法是他们"隐藏"文本,除非某个特征(通常是某个CL实现)是(#+)或不是(#-)可用.
这些可能是CL概念最像C/C++的"文本宏"概念 - 从概念上和实际上,它们非常类似于类似的东西.
#ifdef __MSVC12__
#ifndef __cplusplus__
Run Code Online (Sandbox Code Playgroud)
......等等.它们从字面上隐藏了来自READer 的传入源代码,所以它们从不被lexed - 解析 - 解释 - 编译 - 评估 - 实习 - nada.如果您运行的CL实现缺少功能/是"错误"实现/任何标志,它们就会停止存在.