Functional programming 学习计划宏。帮助我编写一个定义语法规则
我不熟悉Scheme宏。如果我只有一个模式,我想结合定义语法和语法规则,我该怎么做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
(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后的新定义。谢谢你的术语;我不使用关键词,所以我不知道它们叫什么。