Functional programming 学习计划宏。帮助我编写一个定义语法规则

Functional programming 学习计划宏。帮助我编写一个定义语法规则,functional-programming,macros,scheme,Functional Programming,Macros,Scheme,我不熟悉Scheme宏。如果我只有一个模式,我想结合定义语法和语法规则,我该怎么做 (define-syntax for (syntax-rules (from to) [(for i from x to y step body) ...] [(for i from x to y body) ...])) 如果我只有一个,我如何结合语法定义和规则 谢谢。换句话说,您决定for实际上只需要一种模式,并希望编写如下内容: (defmacro (for ,i from ,x to

我不熟悉Scheme宏。如果我只有一个模式,我想结合定义语法和语法规则,我该怎么做

(define-syntax for
  (syntax-rules (from to)
    [(for i from x to y step body) ...]
    [(for i from x to y body) ...]))
如果我只有一个,我如何结合语法定义和规则


谢谢。

换句话说,您决定
for
实际上只需要一种模式,并希望编写如下内容:

(defmacro (for ,i from ,x to ,y step ,body)
  ; code goes here
  )
Scheme中没有内置任何东西可以加快单模式宏的编写速度。传统的解决方案是(令人惊讶!)编写另一个宏


我用过,和PLT方案做了同样的事情。如果您正在学习宏,那么编写您自己的
define syntax rule
等价物将是一个很好的练习,特别是如果您想以某种方式指示关键字,如“for”和“from”。无论是
defsubst
还是
define syntax rule
都不能处理这些问题。

这都是正确的,我还可以补充一点,编写这样一个
define synatx rule
宏是生成宏的宏的一个非常简单的例子。但为了防止您错过它,PLT确实有一个
定义语法规则
作为语言的一部分。(顺便说一句,这些“干扰词”被称为“关键字”,你是对的,
define syntax rule
的通用定义没有它们的位置——这很好,因为关键字通常用于区分多种模式。)这可能是我上次使用PLT后的新定义。谢谢你的术语;我不使用关键词,所以我不知道它们叫什么。