scheme - Scheme R7RS 在宏展开时设置和使用状态的便携方式?
问题描述
我正在寻找一种可移植的方式来设置数据,然后其他宏可以使用这些数据。所有修改都将在顶层进行。我想出了这个:
(import (scheme base)
(scheme write))
(define-syntax foo-data
(syntax-rules ()
((_ (k ...)) (k ... ()))))
(define-syntax foo-add
(syntax-rules ()
((_ a)
(let-syntax ((k (syntax-rules ...* ()
((_ (old-data ...*))
(define-syntax foo-data
(syntax-rules ...** ()
((_ (k* ...**)) (k* ...** (old-data ...* a)))))))))
(foo-data (k))))))
(define-syntax foo-display
(syntax-rules ()
((_)
(let-syntax ((k (syntax-rules ...* ()
((_ (data ...*))
(begin
(display (list data ...*))
(newline))))))
(foo-data (k))))))
(foo-add 1)
(foo-add 2)
(foo-display)
(foo-add 3)
(foo-display)
这在逻辑上做了我想要的,但它似乎只适用于赤壁方案;gauche 两次都打印空列表,kawa 抛出关于空体的错误。什么地方出了错?这在原则上是否可行?
解决方案
推荐阅读
- javascript - 没有音频标签的 chrome 上没有来自 WebRCT 流的音频
- javascript - JQuery 有时会将用户带到页面顶部
- python - 在 HDFS 中为 Livy PySpark 存储 Python 包
- r - 创建一个包含数据框行 ID 的向量
- python - 提高 StopIteration - 不能在我的 MongoDB 上使用可尾光标
- python - 连接到 Aster Teradata Python
- node.js - TypeError:无法将属性“标题”设置为 null
- sql-server - 如何修复不完整的数据/日志
- python - 如何在不需要导入的情况下跨所有模块定义变量?
- c++ - C 或 C++ 中的一元运算符,用于数字的二次方