我正在探索Scheme宏,但是我一直无法找到一个写便利宏的方法。如何在便携式方案中编写照应宏?
我试图写一个each-it
宏,使得该代码:
(each-it (list 1 2 3)
(display it))
扩展到这一点:
(for-each (lambda (it)
(display it))
(list 1 2 3))
我写了一个宏观与syntax-rules
,但是这给了我当我尝试使用它时出现关于未定义标识符的错误。
(define-syntax each-it
(syntax-rules()
((each-it lst body)
(for-each (lambda (it) body)
lst))))
This SO question提到define-syntax-parameter
,这似乎是唯一的球拍。 This blog post给出了一些Scheme代码示例,但代码示例不在R5RS
模式下的DrRacket中运行(我认为它是方括号?)。
R4RS has an interesting macro appendix但它不存在于R5RS中,我不知道我是否可以依赖它。
我可以用完全便携的方式编写我的each-it
宏吗?如果不是,写宏的最常用的宏系统功能是什么?
R5RS http://people.csail.mit.edu/jaffer/r5rs_6.html#SEC39 – Rptx 2014-09-13 17:34:22
@Rptx中有一段宏,但我看不到任何设备在该部分破坏卫生。 – 2014-09-13 22:16:10
简单的解决办法就是[保持卫生](http://community.schemewiki.org/?anaphoric-if)。 – Sylwester 2014-09-14 00:34:35