我正在测试在Emacs 24.3中加载包的方法,具体涉及IT技术。我遵循了emacs prelude
作者的博客中介绍的自动加载包的方法,并将其中的代码复制到我的init.el
文件底部。然而,我收到了一个有关loop
函数/符号的错误信息,如下所示:
Symbol's function definition is void: loop
请问有人能解释如何修复这段代码吗?
我在互联网上搜索了一下,发现loop
是cl-lib
中的宏。我猜测loop
的定义可能缺失,于是我尝试通过添加(require 'cl-lib)
来修复问题,如代码所示,但错误仍然存在。还有其他类似错误消息的SO问题,例如:ELisp: cl-loop for "Symbol's value as variable is void",Symbol's function definition is void: declare-function。但错误消息不同,答案大多建议使用较新版本的emacs等替代方法。
-- 代码 --
(require 'package)
(add-to-list 'package-archives
'("melpa-stable" . "http://stable.melpa.org/packages/") t)
(package-initialize)
;;; check & load packages
(defvar prelude-packages
'( haskell-mode )
"A list of packages to ensure are installed at launch.")
;;(require 'cl-lib) ;debug
(defun prelude-packages-installed-p ()
(loop for p in prelude-packages
when (not (package-installed-p p)) do (return nil)
finally (return t)))
(unless (prelude-packages-installed-p)
;; check for new packages (package versions)
(message "%s" "Emacs Prelude is now refreshing its package database...")
(package-refresh-contents)
(message "%s" " done.")
;; install the missing packages
(dolist (p prelude-packages)
(when (not (package-installed-p p))
(package-install p))))
(provide 'prelude-packages)
;;; end load packages
cl.el'中
cl-loop'的别名。而cl-loop是`cl-macs.el'中的一个Lisp宏。请执行C-h f loop。 - aartist