在Common Lisp中,创建宏定义宏相对容易 . 例如,以下宏
(defmacro abbrev (short long)
`(defmacro ,short (&rest args)
`(,',long ,@args)))
是一个宏定义宏,因为它扩展到另一个宏 .
如果我们现在放
(abbrev def defun)
在我们的程序中,每当我们定义一个新函数时,我们都可以编写 def
而不是 defun
. 当然, abbrev
也可以用于其他事情 . 例如,之后
(abbrev /. lambda)
我们可以写 (/. (x) (+ x 1))
而不是 (lambda (x) (+ x 1))
. 尼斯 . (有关缩写的详细说明,请参阅http://dunsmor.com/lisp/onlisp/onlisp_20.html)
现在,我的问题是:
-
我可以在Racket中编写宏定义宏吗?
-
如果可以,怎么办? (例如,如何在Racket中编写类似
abbrev
宏的内容?)
3 回答
根据球拍指南的this部分:
引用上述链接:
现在
产量
FWIW,它也适用于Guile,所以它不是特定于Racket的东西 .
广告1.是的 . 广告2.您的示例最容易编写
上面的例子评估为42 .
我发现可以使用define或let语句简单地重命名:
要么:
输出:
似乎没有必要为此目的使用任何宏 .