普通列席有未经处理的标志。 正如Juho的回答所说,保证不相隔的象征不等同于任何其他价值。
Common Lisp-style requires uninterned symbols in order to write many macros correctly (particularly macros whose expansion requires introducing and binding new variables), because any interned symbol you use in a macro expansion might capture or shadow a binding in its expansion site.
Scheme s hygienic macro systems, on the other hand, do not have this problem, so a Scheme system does not need to provide uninterned symbols. Still, many of them do. Why? Several reasons:
- Some Scheme systems offer a Common Lisp-style
defmacro
capability.
- In others, the hygienic macro system s implementation may use uninterned symbols internally, but the concept of an uninterned symbol may be exposed.
- Uninterned symbols can be useful in many programs that use s-expressions to represent a language, and transform this language into another s-expr language. These sorts of tasks often benefit from an ability to generate an identifier guaranteed to be new.