应用由关键字确定的其他函数的函数或宏

Function or Macro to Apply Other Functions Determined by Keywords

我希望能够编写如下函数:

(dispatchme :foo)

然后执行:

(foo!)

其中冒号的冒号已经从关键字中剥离出来并且(在本例中)和感叹号被添加以确定最终的函数名称。 foo! 是单独定义的,我想避免使用某种调度 table,例如使用 condhash-table - 可能有多个 keyword/function原则上成对。

如果您假设遵守您暗示的约定,您可以简单地这样做,但您需要考虑包。我假设你在一个特殊变量中有它,但也许你想要 *package* (即 运行 时间的当前包)或 #.*package* (即读取时的当前包)那里:

(defun call-by-key (keyword)
  (funcall (intern (concatenate 'string (symbol-name keyword) "!")
                   *special-package*)))

但是,我看到的唯一合理的用例是在读取函数调用时尚未创建所需的包,即。 e.在系统定义 (ASDF) 中。所以,我的问题是:你想做什么?