【问题标题】:What does #+#. mean in lisp?#+# 是什么意思。在 lisp 中是什么意思?
【发布时间】:2011-08-12 17:55:58
【问题描述】:

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

sn-p:

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

也许这会让它更容易被谷歌搜索:磅加磅 // 哈希加哈希符号 // octothorp 加 octothorp

【问题讨论】:

  • 很好的 Googleability 添加。人们应该始终这样做。
  • 哇,从来不知道它被称为章鱼。
  • 'octothorp' 还是 'octothorpe'? :-) 谷歌似乎暗示后者使用更广泛。
  • 查看SymbolHound,每个程序员都一样。在这些情况下非常有用。
  • 别忘了sharp plussharp dot。 :)

标签: lisp common-lisp slime swank


【解决方案1】:

这种情况很少见。

#+clim clim:+red+ #-clim mygraphics:+red+

above 表示阅读器返回红色符号,这取决于是否有名称为 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

【讨论】:

    【解决方案2】:

    实际上是Sharpsign Plus,后跟Sharpsign Dot

    【讨论】:

      【解决方案3】:

      他们是 Common Lisp reader macro characters:

      由 派遣一两个角色 定义专用语法以供使用 由 Lisp 阅读器,那就是 由阅读器宏实现 功能。

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

      set-dispatch-macro-character 函数可用于使用自定义阅读器宏扩展 Common Lisp 语法。

      【讨论】:

        【解决方案4】:

        此外,#-foo(code to execute) 将仅在 *features* 中的 foo 为 not 时执行代码。

        即使在Common Lisp HyperSpec 中也很难找到有关#+#. 等的信息,但可以通过谷歌搜索“Sharpsign minus”等找到相关的 HyperSpec 页面(感谢 Austin。)

        【讨论】:

          【解决方案5】:

          2.4.8.17 Sharpsign Plus http://www.lispworks.com/documentation/HyperSpec/Body/02_dhq.htm #+测试表达式 Readtime 宏,如果 test 为真读表达式,否则读为空格。

          2.4.8.6 Sharpsign 点 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 太学术化,进入门槛太高(学习曲线和支持社区不是那么好......没有一万个小程序可以让你轻松入门(在一些神秘的您正在使用的实现))。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-06-11
            • 2018-03-05
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 2016-08-17
            • 2010-12-28
            • 1970-01-01
            相关资源
            最近更新 更多