Scheme “和”的区别是什么;实习;及;“不感兴趣的”;符号
“实习”和“非实习”符号之间的区别是什么。是不是只有Racket有不可理解的符号,还是scheme或lisp的其他方言有它们?内部符号是Scheme “和”的区别是什么;实习;及;“不感兴趣的”;符号,scheme,racket,Scheme,Racket,“实习”和“非实习”符号之间的区别是什么。是不是只有Racket有不可理解的符号,还是scheme或lisp的其他方言有它们?内部符号是eq?当且仅当它们有相同的名称时。非预期符号不是任何其他符号的eq?,因此它们是一种带有附加字符串的唯一标记。插入符号是由默认读取器生成的类型。在宏中生成代码时,可以将不需要的符号用作标识符,这样的标识符不能被任何其他标识符遮挡。大多数Lisp方言都有这样的概念,在Scheme中更为罕见,因为卫生宏被认为会降低它的有用性。常见的Lisp有一些不需要的符号。正如J
eq?
当且仅当它们有相同的名称时。非预期符号不是任何其他符号的eq?
,因此它们是一种带有附加字符串的唯一标记。插入符号是由默认读取器生成的类型。在宏中生成代码时,可以将不需要的符号用作标识符,这样的标识符不能被任何其他标识符遮挡。大多数Lisp方言都有这样的概念,在Scheme中更为罕见,因为卫生宏被认为会降低它的有用性。常见的Lisp有一些不需要的符号。正如Juho的回答所说,一个非预期符号保证不等于任何其他值
公共Lisp样式需要不需要的符号才能正确编写许多宏(特别是宏的扩展需要引入和绑定新变量),因为在宏扩展中使用的任何插入符号都可能在其扩展站点中捕获或隐藏绑定
另一方面,Scheme的宏系统不存在这个问题,因此Scheme系统不需要提供不需要的符号。尽管如此,他们中的许多人还是这样做了。为什么?有几个原因:
- 一些Scheme系统提供了一种常见的Lisp风格的
功能defmacro
- 在其他情况下,卫生宏系统的实现可能在内部使用非预期符号,但非预期符号的概念可能会被暴露
- 在许多使用s表达式表示语言并将该语言转换为另一种s-expr语言的程序中,非预期符号可能很有用。这类任务通常受益于生成保证为新的标识符的能力