Symbol

Symbol

  • Say your favorite color — value associated with a name (symbol)

  • Say "your favorite color" — symbol

; define a symbol
(define alpha 27)
(quote alpha)
'alpha
;; ' is a shorthand for quote

; retrieve the value associated with symbol
alpha

; reference the symbol
(quote alpha)
'alpha

; operations
(symbol? (quote alpha)) ; test whether an object is a symbol
(eq? 'alpha 'alpha)     ; test equality of two symbols

由前面的章节,我们知道 Scheme 在对表达式解析时,会先判断表达式类型。比如 lambda 表达式,那么 Scheme 的 evaluator 会认为这是一种特殊表达式,它的评价方式是创建一段对应的程序,然后返回指向该程序的指针,这时候我们就会看到 #[compound-…] 这样的打印输出结果。

同样的道理,Scheme 如果遇到 quote 表达式,它也会认为这是一种特殊表达式,它的评价方式就是为表达式中的第二个子表达式创建内部表示 (internal representation) 并返回,这时候 Scheme 会把对应的内部表示打印出来 — 即 beta。

我们可以像使用其他原始类型数据一样使用 Symbol

但 Scheme 的解释器内部实际上会记住过往的 symbols,因此解释器内部不会存在两个一模一样的 symbol,即这个 symbol 是全局唯一的。因此上文中的表达式实际上在解释器内部表示如下图所示:

然后再对这些列表进行评价。而评价 quote 这种特殊表达式时,就将 quote 后面的整个列表返回而不作任何额外评价,因此最后打印出来的返回信息就是该表达式本身。更多例子举例如下:

Symbol 提高 Scheme 语言表达力

例:Symbolic Derivatives

参考

Last updated