在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))
。很好。(有关abbrev的详细解释,请参见http://dunsmor.com/lisp/onlisp/onlisp_20.html)现在,我的问题是:
- 我能否在Racket中编写宏定义宏?
- 如果可以,如何实现?(例如,如何编写类似于
abbrev
宏的东西?)