Tôi đang thử nghiệm trên các gói tải trong emacs init.el
(Emacs 24.3). Tôi đã theo dõi a blog bởi tác giả của emacs prelude
để tự động tải các gói và sao chép mã đó vào số init.el
của tôi ở dưới cùng. Tuy nhiên, tôi nhận được thông báo lỗi về chức năng/biểu tượng loop
, có nội dung:emacs: Định nghĩa chức năng của biểu tượng bị vô hiệu: loop
Symbol's function definition is void: loop
Ai đó có thể giải thích cách sửa mã?
Tôi đã tìm kiếm trên internet và có vẻ như là loop
là macro trong cl-lib
. Tôi đoán là định nghĩa cho thiếu loop
và tôi đã cố khắc phục sự cố bằng cách thêm (require 'cl-lib)
, như được hiển thị trong mã, nhưng lỗi vẫn còn. Có các câu hỏi SO khác về thông báo lỗi tương tự, ví dụ: ELisp: cl-loop for "Symbol's value as variable is void", Symbol's function definition is void: declare-function. Nhưng các thông báo lỗi khác nhau về những gì còn thiếu, và câu trả lời chủ yếu đề xuất các tuyến đường thay thế, chẳng hạn như sử dụng phiên bản mới hơn của emacs.
- Mã -
(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
Điều này có thể giúp: (Emacs 24.3.1): vòng lặp là bí danh cho 'cl-loop 'trong' cl.el'. Và cl-loop là một macro Lisp trong 'cl-macs.el '. Thực hiện vòng lặp C-h f. – aartist