Ich testete auf das Laden von Paketen in Emacs init.el
(Emacs 24.3). Ich folgte a blog vom Autor emacs prelude
, um Pakete automatisch zu laden, und kopierte den Code dort in meinen init.el
wie in der Unterseite. Aber ich bekam eine Fehlermeldung über die loop
Funktion/Symbol, das sagt:Emacs: Symbols Funktionsdefinition ist void: Schleife
Symbol's function definition is void: loop
Kann jemand bitte erklären, wie Sie den Code zu beheben?
Ich habe im Internet gesucht, und es scheint, dass loop
ein Makro in cl-lib
ist. Meine Vermutung ist, dass die Definition für loop
fehlt, und ich versuchte, das Problem zu beheben, indem Sie (require 'cl-lib)
hinzufügen, wie im Code gezeigt, aber der Fehler bleibt. Es gibt andere SO-Fragen zu ähnlichen Fehlermeldungen, zum Beispiel: ELisp: cl-loop for "Symbol's value as variable is void", Symbol's function definition is void: declare-function. Die Fehlermeldungen unterscheiden sich jedoch in den fehlenden Angaben, und die Antworten weisen meist auf alternative Routen hin, beispielsweise auf eine neuere Version von Emacs.
- Code -
(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
Das kann helfen: (Emacs 24.3.1): loop ist ein Alias für 'cl-loop 'in' cl.el'. Und cl-Schleife ist ein Lisp-Makro in 'cl-macs.el '. Do C-h f Schleife. – aartist