【发布时间】:2011-10-17 19:29:56
【问题描述】:
据我了解,LISP 中宏的用途之一是生成所需的代码。
我有以下主体代码:
(list (list "aVar" "Hi")
(list "bVar" 10)
(list "addSW1" (equal dpl->addSW1))
...
(list "addSW100" (equal dpl->addSW100)))
所以,基本上我正在尝试编写为SW1 到SW100 生成代码的宏,这样我就不需要写100 行了。
我创建了我的第一个宏:
(defmacro myMac1 (dpl sw)
`(list ,switchStr "boolean" (equal "Y" (get ,dpl ,sw))))
这对我有用,所以我现在可以执行(myMac1 "addSW1") 来生成单个列表语句。
然后,我创建了第二个 mac:
(defmacro myMac2 (dpl @rest allSwitches)
`(mapcar (lambda (sw)
(myMac1 ,dpl sw))
,@allSwitches))
所以,如果我写(myMac2 dpl "addSW1" "addSW2" ... "addSW100")
它将生成:
(list (list "addSW1" (equal dpl->addSW1))
... till 100))
但是,在主体代码中,我不想要列表列表。我只想要 100 个列表。
有什么解决办法吗?很抱歉描述太长:P。
【问题讨论】: