什么#+#.在lisp意味着什么?

Tim*_*son 20 lisp common-lisp slime swank

google几乎是不可能的,因此我的理解仅限于通过读取粘液源代码的上下文线索:也许它是普通lisp中对象系统的一部分?像'自我'这样的东西?

片段:

(cond #+#.(swank-backend::sbcl-with-new-stepper-p)
Run Code Online (Sandbox Code Playgroud)

也许这会使它更具有可谷歌性:磅加磅//哈希加哈希符号// octothorp plus octothorp

Rai*_*wig 20

这是非常罕见的.

#+clim clim:+red+ #-clim mygraphics:+red+
Run Code Online (Sandbox Code Playgroud)

上述表示阅读器返回红色符号,它取决于是否在名称列表中有名称为CLIM的符号*features*.这是Common Lisp中的内置机制.

#.(cl:if (cl:zerop (cl:random 2)) :high :low)
Run Code Online (Sandbox Code Playgroud)

以上也是读者的机制.它允许在读取时进行计算.顺便说一句.是一个安全问题,在Lisp应用程序中它应该被禁用 - 请参阅变量*read-eval*来控制它.在读取时,使用READ的读取器将返回:HIGH或:LOW,随机.

组合#+#.(FOO) BAR意味着函数foo在读取时返回一个符号,然后读者检查该符号是否在特征列表中有一个带有此名称的符号,*features*如果是这种情况,则读取输入中的下一个项目,否则跳过下一个项目.

琐碎的例子,IF总是返回:在这个例子中的CAPI:

在LispWorks中(CAPI在功能列表中):

CL-USER 41 > (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")
A
31
Run Code Online (Sandbox Code Playgroud)

在SBCL

* (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")

B
32
Run Code Online (Sandbox Code Playgroud)


Aus*_*lor 15

它实际上是Sharpsign Plus,然后是Sharpsign Dot.