【发布时间】:2014-12-23 04:29:35
【问题描述】:
在 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 中编写宏定义宏吗?
- 如果可以,该怎么做? (例如,如何编写类似于
abbrevRacket 中的宏?)
【问题讨论】:
-
你颠倒了你的宏参数,long 应该是第一位的。
-
我在我的问题中更正了这一点。坦克!
标签: macros lisp common-lisp racket hygiene