谷歌几乎是不可能的,因此我的理解仅限于阅读粘液源代码的上下文线索:也许它是普通 lisp 中对象系统的一部分?像“自我”这样的东西?
片段:
(cond #+#.(swank-backend::sbcl-with-new-stepper-p)
也许这会让它更容易被谷歌搜索:磅加磅//哈希加哈希符号//octothorp plus octothorp
谷歌几乎是不可能的,因此我的理解仅限于阅读粘液源代码的上下文线索:也许它是普通 lisp 中对象系统的一部分?像“自我”这样的东西?
片段:
(cond #+#.(swank-backend::sbcl-with-new-stepper-p)
也许这会让它更容易被谷歌搜索:磅加磅//哈希加哈希符号//octothorp plus octothorp
这是相当罕见的。
#+clim clim:+red+ #-clim mygraphics:+red+
上面的意思是读者返回红色符号,这取决于特征列表中是否有名称为 CLIM 的符号*features*
。这是 Common Lisp 中的内置机制。
#.(cl:if (cl:zerop (cl:random 2)) :high :low)
以上也是阅读器的一种机制。它允许在读取时进行计算。顺便说一句。是一个安全问题,在 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
在 SBCL
* (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")
B
32
它实际上是Sharpsign Plus后跟Sharpsign Dot。
它们是 Common Lisp阅读器宏字符:
由分派引入的一个或两个字符的文本符号,它定义了供 Lisp 阅读器使用的特殊用途语法,并由阅读器宏函数实现。
阅读器宏不应与常规宏混淆- 它们彼此无关。
set-dispatch-macro-character函数可用于使用自定义阅读器宏扩展 Common Lisp 语法。
2.4.8.17 Sharpsign Plus http://www.lispworks.com/documentation/HyperSpec/Body/02_dhq.htm #+test 表达式 Readtime 宏,如果 test 为真读表达式,否则读为空格。
2.4.8.6 Sharpsign Dot http://www.lispworks.com/documentation/HyperSpec/Body/02_dhf.htm #。foo 语法对 foo 执行读取时评估。
http://www.lispworks.com/documentation/HyperSpec/Body/02_dh.htm 所有#X 操作符(由 Lisp HyperSpec 定义)
为什么 Lisp HyperSpec 必须如此难以阅读?可能是因为它是由委员会完成的。我说这是 Lisp 不受欢迎的原因之一。此外,Lisp 过于学术,进入门槛太高(学习曲线和支持社区不是那么好......没有一万个小程序可以让你轻松入门(在一些神秘的您正在使用的实现))。
此外,仅当 foo不在时#-foo(code to execute)
才会执行代码。*features*
即使在Common Lisp HyperSpec中也很难找到有关 、 等的#+
信息,但可以通过谷歌搜索“Sharpsign minus”等找到相关的 HyperSpec 页面(感谢 Austin。)#.