2016-09-08 6 views
0

Я пытаюсь использовать следующий в моем ~/.emacs требовать пакетов, которые я установлен, и хотел бы использовать:Symbol является недействительным: карта

(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 

ответ

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

Итак, сначала вы должны будете:

(require 'cl) 

или в качестве альтернативы:

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

Как отмечено в phils' answer, причина этого не в том, что эта функция принадлежит библиотеке cl, которая реализует функции Common Lisp в Emacs Lisp.

Существует «родная» функция Emacs Lisp, которая делает то, что вы хотите: mapc. Он применяет функцию к каждому элементу последовательности и отбрасывает возвращаемое значение.

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

(Существует также mapcar, что как вызов map с 'list в качестве первого аргумента.)