检查符号是否绑定

时间:2017-06-14 10:36:48

标签: guile

在Emacs Lisp (boundp 'symbol)如果t绑定某个值,则返回symbol,否则返回nil。在Guile计划中是否有相同的程序?

1 个答案:

答案 0 :(得分:4)

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

标识符名称被视为标识变量,除非它标识宏(语法)或它在上下文中,要求将其视为标识符号,例如通过引用。特别是,R7RS的第2.1节规定“当标识符显示为文字或文字内(参见第4.1.2节)时,它用于表示符号(参见第6.5节)”。您可以测试标识符是否使用符号标识符号?过程

Guile方案确实通过实际符号实现标识符,您可以使用已定义的方式查询符号是否绑定?:

(defined? 'num)

=> #F

(define num 1)(defined? 'num)

=> #T

这是一个诡计的实施问题,而不是便携式方案。

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