gpt4 book ai didi

macros - 在宏中,我可以让 ,var 评估为空白/无吗?

转载 作者:行者123 更新时间:2023-12-01 11:57:06 25 4
gpt4 key购买 nike

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

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

是否有一个我可以使用的值,使得 var 的计算结果完全为零,消失了? (从哲学的角度来看,不应该有一个吗?)

最佳答案

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

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

未使用 值已消失。

关于macros - 在宏中,我可以让 ,var 评估为空白/无吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com