首页 > 解决方案 > 为什么嵌套的 quasiquote 不展开 splice-unquote?

问题描述

为什么第一个宏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)))))))

标签: macrosscheme

解决方案


在第一个例子中

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

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

在第二个例子中

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

有 3 个准引号和 3 个非引号,所以 'x' 将被它的值替换。


推荐阅读