为什么嵌套的准引用不展开拼接-取消引用?

时间:2019-05-08 12:34:32

标签: macros scheme

为什么第一个宏unquote-splicing不产生(quasiquote (unquote (quasiquote 1 2))),但是第二个示例替换了该值?

(define x (list 1 2))
(t '(quasiquote (unquote (quasiquote (unquote-splicing x))))
   (quasiquote (quasiquote (unquote (quasiquote (unquote-splicing x))))))

(t '(quasiquote (unquote (quasiquote (unquote (1 2)))))
   (quasiquote (quasiquote (unquote (quasiquote (unquote (unquote x)))))))

1 个答案:

答案 0 :(得分:1)

在第一个示例中

(quasiquote (quasiquote (unquote (quasiquote (unquote-splicing x)))))

这有3个准引号和2个非引号,因此不会评估'x'。

在第二个示例中

(quasiquote (quasiquote (unquote (quasiquote (unquote (unquote x))))))

有3个准引号和3个非引号,因此'x'将被其值替换。