Lisp 什么是+;#。用口齿不清是什么意思?

Lisp 什么是+;#。用口齿不清是什么意思?,lisp,common-lisp,slime,swank,Lisp,Common Lisp,Slime,Swank,谷歌几乎不可能做到这一点,因此我的理解仅限于阅读slime源代码中的上下文线索:也许它是common lisp中对象系统的一部分?类似“自我”的东西 片段: (cond #+#.(swank-backend::sbcl-with-new-stepper-p) 也许这会使它更易于谷歌搜索:pound plus pound//hash plus hash symbol//OctorOp plus OctorOp它后面紧跟着的是。这很少见 #+clim clim:+red+ #-clim mygra

谷歌几乎不可能做到这一点,因此我的理解仅限于阅读slime源代码中的上下文线索:也许它是common lisp中对象系统的一部分?类似“自我”的东西

片段:

(cond #+#.(swank-backend::sbcl-with-new-stepper-p)

也许这会使它更易于谷歌搜索:pound plus pound//hash plus hash symbol//OctorOp plus OctorOp

它后面紧跟着的是。

这很少见

#+clim clim:+red+ #-clim mygraphics:+red+
上面的意思是读卡器返回红色符号,这取决于功能列表中是否有名为CLIM的符号
*功能*
。这是CommonLisp中的内置机制

#.(cl:if (cl:zerop (cl:random 2)) :high :low)
以上也是读者的一种机制。它允许在读取时进行计算。顺便说一句,哪个是安全问题,在Lisp应用程序中应该禁用它-请参阅变量
*read eval*
以控制此问题。在读取时,使用read的读卡器将随机返回:HIGH或:LOW

组合
#+#(FOO)条
意味着函数FOO在读取时返回一个符号,如果功能列表
*功能*
上有一个具有此名称的符号,则读取器将检查该符号,如果是这样,则读取输入中的下一项,否则跳过下一项

简单示例,如果始终返回:CAPI在本示例中:

在LispWorks中(其中CAPI位于功能列表上):

在SBCL中

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

B
32

它们是常见的口齿不清:

由引入的文本符号 在一个或两个字符上分派 定义要使用的专用语法 通过Lisp阅读器,这就是 由读卡器宏实现 功能

读卡器宏不应与常规宏混淆-它们彼此无关

该函数可用于使用自定义读取器宏扩展通用Lisp语法。

此外,
-foo(要执行的代码)
仅当foo不在
*功能*
中时才会执行代码

即使在中也很难找到有关
+
.
等的信息,但可以通过谷歌搜索“Sharpsign减号”等找到相关的HyperSpec页面(感谢奥斯汀)。

2.4.8.17 Sharpsign Plus #+测试表达式 Readtime宏,如果测试为true,则读取表达式,否则将其读取为空白

2.4.8.6锐化符号点 #。foo语法执行foo的读取时评估

所有#X运算符(由Lisp HyperSpec定义)

为什么Lisp HyperSpec必须如此难以阅读?
可能是因为它是由委员会完成的。我说这是Lisp不受欢迎的原因之一。此外,Lisp太过学术化,进入门槛太高(学习曲线和支持社区都不太好……没有一万个小程序可以让你轻松启动(在你正在使用的一些神秘实现中)。

Nice Googleability addition。人们应该一直这样做。哇,从来都不知道它被称为octothorp。‘octothorp’或‘octothorpe’?:-)谷歌似乎暗示后者的应用更广泛。看看吧,每个程序员都是如此。在这些情况下,它非常有用。不要忘记
sharp plus
sharp dot
:)
* (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")

B
32