符号的函数定义为void:map

时间:2016-09-08 15:24:47

标签: debugging emacs

我正在尝试在我的~/.emacs中使用以下内容来要求我已经安装并希望使用的软件包:

(map #'nil (lambda (x) (require x))
 '(
   undo-tree
   savekill
   wrap-region
   free-keys))

但是,当我尝试通过让Emacs评估缓冲区来测试它时,我收到此错误:Symbol's function definition is void: map当我正常启动emacs时出现相同的错误,我相信我已经解决了这个问题之前,但我不记得我是怎么做到的。

以下是我运行时获得的调试信息:emacs --debug-init

Debugger entered--Lisp error: (void-function map)
(map (function nil) (function (lambda (x) (require x))) 
 (quote (undo-tree savekill wrap-region free-keys)))
 eval-buffer(#<buffer  *load*> nil "c:/Users/rr257875/AppData/Roaming/.emacs" nil t)  ; Reading at buffer position 944
load-with-code-conversion("c:/Users/rr257875/AppData/Roaming/.emacs" "c:/Users/rr257875/AppData/Roaming/.emacs" t t)
load("~/.emacs" t t)
#[0 "\205\262

2 个答案:

答案 0 :(得分:4)

正如phils' answer所述,这个函数不起作用的原因是这个函数来自cl库,它在Emacs Lisp中实现了Common Lisp函数。

有一个&#34;本地人&#34; Emacs Lisp函数可以执行您想要的操作:mapc。它在每个序列元素上应用函数,并丢弃返回值。

(mapc #'require
 '(
   undo-tree
   savekill
   wrap-region
   free-keys))

(还有mapcar,就像用map作为第一个参数调用'list一样。)

答案 1 :(得分:3)

map is an alias for `cl-map' in `cl.el'.

首先你需要:

(require 'cl)

或者:

(require 'cl-lib)
(cl-map ...)