【问题标题】:Check whether a symbol is bound检查符号是否被绑定
【发布时间】:2017-11-16 11:06:23
【问题描述】:

在 Emacs Lisp 中,(boundp 'symbol) 如果 symbol 绑定到某个值,则返回 t,否则返回 nil。 Guile Scheme 中是否有等效的程序?

【问题讨论】:

    标签: guile


    【解决方案1】:

    方案避免将实现泄漏到规范中,并谈到“标识符”而不是将内部符号绑定到值 - 请参阅 R7RS 的 §2.1。在方案中,“标识符”只是一个名称。

    标识符名称被视为标识变量,除非它标识了一个宏(语法),或者它在需要将其视为标识符号的上下文中,例如通过引号。特别是,R7RS 的 §2.1 指出“当标识符作为文字或在文字中出现时(参见第 4.1.2 节),它被用来表示符号(参见第 6.5 节)”。你可以测试一个标识符是否用符号来识别一个符号?过程。

    Guile 方案实际上是通过 interning 符号来实现标识符的,您可以使用 defined? 查询符号是否绑定:

    (defined? 'num)
    

    => #f

    (define num 1)(defined? 'num)
    

    => #t

    这是一个狡猾的实现问题,而不是可移植的方案。

    编辑:注意定义?仅适用于用 define 定义的顶级变量。它不适用于 let 和 cognates。

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多