我最近在一些常见的LISP库代码中遇到了这一行:
(string-equal #1="http://" url :end2 (min (length url) #2=#.(length #1#)))
这里,url
作为字符串变量传入。我理解这种比较的目的是确定url
字符串是否以http://
开头,并且它是不区分大小写的比较。我也了解string-equal
个密钥,例如:start
和:end
。但是英镑符号(#
)物品扔给了我。我可以通过上下文来解决大部分内容,但我还没有找到有关它是如何工作的文档,我仍然对#2=#.(length #1#)
的真正含义感到困惑。对我来说看起来有些神秘。
有人可以解释一下英镑符号机制在这个特定的上下文中是如何工作的,以及它是否可以以相同的方式在其他结构中普遍使用?或者指向我描述它的文档/网站。
谢谢!
答案 0 :(得分:13)
在Hyperspec here中描述了磅(或尖锐)符号的功能。
#1=
符号labels以下表单(此处为字符串"http://"
),后面带backreference符号#1#
的数字索引。 #.
导致以下表单为evaluated at read time。
总体效果是使代码编写为:
(string-equal "http://" url :end2 (min (length url) 7))