我正在尝试定义一些辅助函数以从 emacs 中快速跳转到不同的项目。我首先定义了一个宏,如下所示
(defmacro project-alias (name path)
`(defun ,name ()
(interactive)
(cd ,path)))
这很好用,我(project-alias foo "~/bar")
没问题。当我尝试将此宏应用于元组列表时,问题就来了。
(setq projects '((foo . "~/foo")
(bar . "~/bar")))
(dolist (p projects)
(project-alias (car p) (cdr p)))
上面的代码错误与
Debugger entered--Lisp error: (wrong-type-argument symbolp (car p))
defalias((car p) (lambda nil (interactive) (cd (cdr p))))
我尝试将第一个参数作为字符串传递并调用intern
以毫无乐趣地获取符号表示,并且我还尝试定义我的宏以接受字符串形式,但这也不起作用
我究竟做错了什么?