(defspel game-action (command subj obj place &rest rest)
`(defspel ,command (subject object)
`(cond ((and (eq *location* ',',place)
(eq ',subject ',',subj)
(eq ',object ',',obj)
(have ',',subj))
,@',rest)
(t '(i cant ,',command like that.)))))
来自http://www.lisperati.com/actions.html的代码用于'宏定义宏'。我似乎无法将其恰当地转换为方案。有人可以向我解释在Scheme中创建同类事物的过程吗?
答案 0 :(得分:4)
这种宏在Scheme中实际上要简单得多,因为您可以使用define-syntax-rule
完成所有操作(在标准的Scheme代码中,您需要define-syntax
+ syntax-rules
)。你基本上做同样的事情,减去整个报价/不引用的混乱。
(defspel (game-action command subj obj place rest ...)
(defspel (command subject object)
(cond [(and (eq? *location* 'place)
(eq? 'subject 'subj)
(eq? 'object 'obj)
(have 'subj))
rest ...]
[else '(i cant command like that.)])))
由于这实际上是大部分代码,我将整个内容移植到PLT - 请参阅邮件列表中的post。