【问题标题】:Lisp: advanced string comparisonLisp:高级字符串比较
【发布时间】:2014-01-02 04:04:40
【问题描述】:

我最近在一些常见的 LISP 库代码中遇到了这行代码:

(string-equal #1="http://" url :end2 (min (length url) #2=#.(length #1#)))

这里,url 作为字符串变量传入。我了解此比较的目的是确定 url 字符串是否以 http:// 开头,并且它是不区分大小写的比较。我也了解string-equal键,比如:start:end。但是井号 (#) 的物品让我大吃一惊。我可以通过上下文弄清楚其中的大部分内容,但我还没有找到关于它如何工作的文档,而且我仍然对#2=#.(length #1#) 的真正含义感到困惑。对我来说它看起来有点神秘。

有人可以解释一下英镑符号机制在这种特定情况下是如何工作的,以及它是否可以以同样的方式在其他构造中普遍使用?或者将我指向描述它的文档/网站。

谢谢!

【问题讨论】:

    标签: lisp common-lisp


    【解决方案1】:

    在 Hyperspec here 中描述了井号(或尖号)的功能。

    #1= 表示法labels 如下形式(此处为字符串"http://"),后面的backreference 使用#1# 表示法的数字索​​引。 #. 导致以下表单为 evaluated at read time

    整体效果是让代码好像写成这样:

    (string-equal "http://" url :end2 (min (length url) 7))
    

    【讨论】:

    • 谢谢肖恩。为什么程序员也会有#2=?我想在这种情况下它是多余的。
    • 这对我来说也是多余的。
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多