假定宏将采用布尔类型a
和b
。如果a
为nil
,则宏应返回nil
(不进行任何评估b
),否则返回b
。你怎么做到这一点?
这实际上取决于您可以使用什么。例如,or
有空吗?if
?cond
?
这是一个例子:
(defmacro and (a b)
`(if ,a ,b nil)
编辑。在回应评论时,or
更为复杂,因为我们必须避免双重评估:
(defmacro or (a b)
(let ((v (gensym "OR")))
`(let ((,v ,a))
(if ,v ,v ,b))))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句