macros - 为什么嵌套的 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)))))))
解决方案
在第一个例子中
(quasiquote (quasiquote (unquote (quasiquote (unquote-splicing x)))))
这有 3 个准引号和 2 个非引号,因此不会评估 'x'。
在第二个例子中
(quasiquote (quasiquote (unquote (quasiquote (unquote (unquote x))))))
有 3 个准引号和 3 个非引号,所以 'x' 将被它的值替换。
推荐阅读
- javascript - 如果在 1 分钟内未收到响应(NodeJs),我如何返回错误
- c# - 如何读取 EPC 和 TID 执行库存(Zebra Xamarin RFID SDK)?
- python - Python pip - 无法更新 pip
- php - Laravel 路由语言环境中间件无法与模型绑定一起使用
- firebase - 如何从 FirebaseAuthException 正确捕获异常
- postgresql - Spring JPA postgresql-错误查询结构与函数结果类型不匹配
- azure - 更新 Azure ML 实时终结点
- javascript - 使用 Intersection Observer 检查元素是否在浏览器视口上完全可见
- python - 聚合无容量网络设计问题的基本运输问题
- sql - 如何在“出租车”和“图书”类别中选择第一个获得 1000 积分的 1000 位顾客?(SQLite)