Modern Scheme(及其后代如 Racket)具有非常强大的卫生宏系统。在我看来,quote他们quasiquote在定义(不卫生的)宏(如果我没有弄错的话,Common Lisp 中仍然这样做)到卫生的宏系统方面已经失去了他们的历史地位。实际上在语言报告中,quote并且quasiquote仅作为构建数据的便捷方式呈现,特别是列表。确实,如果她能忍受乏味的话,没有他们也可以。例如,(quote (+ 1 2))可以改写为(list (quote +) 1 2),(quasiquote (+ (unquote (- 2 1)) 2))可以改写为(list (quote +) (- 2 1) 2)。
现在假设我们在 Scheme 中引入了符号的新原始类型:以大写字母开头的标识符是符号,否则是变量。SoX表示符号x,那么上面的例子可以写成(list Plus 1 2)and (list Plus (- 2 1) 2)。(让我们假设Plus代表符号+。)现在我们可以这么说quote并且quasiquote是多余的吗?还是我错过了什么?
编辑:
eval在极少数情况下似乎仍然有用:SCHEME 中的 EVAL澄清的问题。