我正在探索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