2009-10-01 66 views
3

我是Scheme宏的新手。如果我只有一種模式,並且想要將定義語法和語法規則結合起來,那麼我該怎麼做?學習計劃宏。幫我寫一個定義語法規則

(define-syntax for 
    (syntax-rules (from to) 
    [(for i from x to y step body) ...] 
    [(for i from x to y body) ...])) 

如果我只有一個for,我該如何組合語法定義和規則?

謝謝。

回答

4

換句話說,你決定for真的只需要一個模式,並希望寫類似:

(defmacro (for ,i from ,x to ,y step ,body) 
    ; code goes here 
) 

沒有什麼內置的方案,使單一模式的宏快寫。傳統的解決方案是(驚喜!)寫另一個宏。

我已經使用defsubst from Swindle和PLT計劃now ships with define-syntax-rule,它做同樣的事情。如果你正在學習宏,那麼編寫自己的define-syntax-rule等效將是一個很好的練習,特別是如果你想用某種方式來表示關鍵字「for」和「from」。那些defsubstdefine-syntax-rule都不能處理那些。

+3

這是完全正確的,我還可以補充說,編寫這樣一個'define-synatx-rule'宏是一個非常簡單的宏生成宏的例子。但是,如果你錯過了它,PLT *會有一個'define-syntax-rule'作爲該語言的一部分。 (順便說一句,那些「噪音詞」被稱爲「關鍵詞」,而且你認爲「define-syntax-rule」的通用定義對他們來說沒有一席之地 - 這很好,因爲關鍵字是通常用於區分多種模式。) – 2009-10-01 02:00:39

+0

自從我上次使用PLT以來可能是新的。感謝術語;我不使用關鍵字,所以我不知道他們叫什麼。 – 2009-10-02 17:11:10