2009-10-01 24 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