我正在測試emacs的加載包(Emacs 24.3)。我跟着a blog由emacs prelude
的作者自動加載包,並將代碼複製到我的中,如下所示。但是,我得到了loop
函數/符號,它說的錯誤消息:emacs:Symbol的函數定義是void: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):loop是cl.el中'cl-loop'的別名。並且 cl-loop是'cl-macs.el'中的一個Lisp宏。做C-h f循環。 – aartist