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

nil*_*nil 3 macros common-lisp argument-passing

感谢以前关于常见的lisp的答案:宏如何用编程生成的名称定义其他方法/宏?我有一个定义辅助函数的宏(实际上我有一个macrolet,我最喜欢的lisp-newbie-hammer).但是在这个宏中,有一些东西可以决定辅助函数是否需要接受特定的参数.所以我有一个带有几乎相同分支的if语句 - 在一个分支中,我将var放在生成函数的lambda列表中.在另一个分支中,我省略了var.(我正在为非程序员编写DSL,所以我不希望他们看到类似&可选的东西)

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

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

Xac*_*ach 5

一种选择是使用,@var并将值作为列表(如果应该使用),nil如果不应该使用.例如:

(let ((used `((frob 1 2 3)))
      (unused nil))
  `(progn ,@unused ,@used))
=> (PROGN (FROB 1 2 3))
Run Code Online (Sandbox Code Playgroud)

unused值已经消失.