检查符号是否绑定

Check whether a symbol is bound

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

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

标识符名称被视为标识一个变量,除非它标识一个宏(语法)或在上下文中要求它被视为标识一个符号,例如通过引号。特别是,R7RS 的 §2.1 指出 "When an identifier appears as a literal or within a literal (see section 4.1.2), it is being used to denote a symbol (see section 6.5)"。你可以测试一个identifer是否用symbol来识别一个symbol?程序。

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

(defined? 'num)

=>#f

(define num 1)(defined? 'num)

=> #t

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

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