检查符号是否绑定
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。
在 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。