检查符号是否绑定

Ern*_*t A 2 guile

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

Chr*_*ine 5

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

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

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

(defined? 'num)
Run Code Online (Sandbox Code Playgroud)

=> #f

(define num 1)(defined? 'num)
Run Code Online (Sandbox Code Playgroud)

=> #t

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

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