(defmacro test (&key list &environment env)
(typecase (get-type list env)
(list `(do-something (list ,@list)))
(integer `(do-something (list ,list ,list ,list)))))
(test :list '(1 2 3)) ; => (do-something (list 1 2 3))
(test :list (* 1 2)) ; => (do-something (list (* 1 2) (* 1 2) (* 1 2)))
是否可以在宏展开时获取list
的类型? (我称为get-type
)获取宏中的类型信息
它不适用于评估,因为此时变量可能不存在,也可能会更改其他一些值,但不应更改。
或者我应该让我的宏扩展是一种形式,也称为typecase?