【发布时间】:2015-06-15 14:14:10
【问题描述】:
我正在测试在 emacs init.el (Emacs 24.3) 中加载包。我跟着emacs prelude 的作者a blog 自动加载包,并将那里的代码复制到我的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
【问题讨论】:
-
这可能会有所帮助:(Emacs 24.3.1):循环是
cl-loop' incl.el' 的别名。 cl-loop 是 `cl-macs.el' 中的一个 Lisp 宏。做 C-h f 循环。
标签: emacs emacs-prelude