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

