在宏内部,我可以,var评估为空白/没有?

时间:2011-05-12 16:05:27

标签: macros common-lisp argument-passing

感谢common lisp: how can a macro define other methods/macros with programmatically generated names?上的先前答案我有一个定义辅助函数的宏(实际上我有一个宏,我最喜欢的lisp-newbie-hammer)。但是在这个宏中,有一些东西可以决定辅助函数是否需要接受特定的参数。所以我有一个带有几乎相同分支的if语句 - 在一个分支中,我将var放在生成函数的lambda列表中。在另一个分支中,我省略了var。 (我正在为非程序员编写DSL,所以我不希望他们看到像& optional这样的东西)

有没有办法避免在这里有基本重复的代码?如果我将var设置为“”,那么“”会出现在我生成的defuns的lambda列表中。如果我将var设置为nil,则会出现NIL。

是否有一个我可以使用的值,var完全没有任何评价,眨眼不存在? (哲学上的兴趣,不应该有吗?)

1 个答案:

答案 0 :(得分:5)

一种选择是使用,@var,如果应该使用,则将您的值设为列表,如果不应该使用nil。例如:

(let ((used `((frob 1 2 3)))
      (unused nil))
  `(progn ,@unused ,@used))
=> (PROGN (FROB 1 2 3))

unused值已消失。