1
我想編寫一個助手宏來編寫匹配擴展。我有這樣的事情:如何將「休息」變量綁定到宏中的值列表中
所以我想要一個宏,將這樣做讓綁定。我已經開始像這樣的東西:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(match-let ([(vars ...) (cdr (syntax-e stx))])
body))))
但match-let
在改造時沒有定義。
第一個問題是有沒有其他的方式來做到這一點(我的意思是使這個擴展器)?也許在我沒有意識到的plt-scheme中有類似的東西,或者我在某種程度上做錯了。
無論對第一個問題的回答如果我想要將變量列表綁定到宏內部的值列表中,我該怎麼做?
編輯:在與禮的答案宏觀組合現在看起來是這樣的:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(syntax-case stx()
[(_ vars ...)
body]))))
謝謝,這是有益的,並幫助我解決了我的問題。爲了完整起見,如果我沒有創建擴展器,但是說,擴展爲具有使用列表的lambda的宏,並且想要將列表元素綁定到宏參數? – Slartibartfast 2010-01-13 08:28:20
大多數情況下,當您使用模式匹配工具編寫宏時。但是每隔一段時間(當您編寫更高級的宏時會出現更多錯誤消息等問題),您需要將它們變成列表。爲此,你可以使用類似'(syntax-> list#'(stuff ...))' - 它將帶括號的語法對象,並將其轉換爲語法對象列表。 – 2010-01-13 08:40:25