【发布时间】:2019-07-16 17:32:36
【问题描述】:
我想知道是否可以从像(伪代码)这样的循环中动态构建 COND 子句:
(defvar current-state 1)
(defmacro mymacro ()
(cond
`(loop (state . callback) in possible-states
do ((eq current-state ,state)
(funcall ,callback)))))
LOOP 将从列表中构建子句并生成如下内容:
(cond
((eq current-state 1)
(funcall func-1))
((eq current-state 2)
(funcall func-2))
((eq current-state 3)
(funcall func-3)))
【问题讨论】:
-
建立一个列表,这不是
mapcar的用途吗?将列表拼接到位,可以使用,@。 -
如果你的状态是一个数字并且所有状态都是连续的,也许使用回调向量
标签: lisp common-lisp lisp-macros