Как мне передать аргументы в map в emacs lisp?

#emacs #lisp #elisp

#emacs #lisp #elisp

Вопрос:

Я хочу написать небольшую функцию для добавления значения в список. это выглядит следующим образом:

(defvar fares '(31.14 28.12 25.10 22.08 19.06 16.04 13.02 10))

(defun plus-extra (fare) ( 3.02 fare))

(map 'plus-extra fares)

Как и следовало ожидать, elisp выдает ошибку, потому что функции нужен аргумент. Чего я не понимаю?

Спасибо, Роберт

Ответ №1:

Функция, которой здесь не хватает аргументов, является map не той, которую вы определили.

map Функция не существует в Emacs Lisp, она предоставляется cl пакетом. Для этой map функции требуется 3 аргумента, первый из которых должен соответствовать типу того, что map должно возвращаться. Это:

 (map 'list 'plus-extra fares)
  

будет работать. Но то, что вы хотите, это:

 (mapcar 'plus-extra fares)
  

который является родным elisp.

PS: Не забывайте, что Emacs поставляется со своей документацией! C-h f map RET ;-).

Комментарии:

1. С частичным применением функции: (тарифы mapcar (применить-частично’ 3.02))

Ответ №2:

Использовать mapcar , а не map . С mapcar ваш пример приводит:

 (34.160000000000004 31.14 28.12 25.099999999999998 22.08 19.06 16.04 13.02)
  

Если вы M-x describe-function RET map RET , вы увидите, что подпись map не такая, какую вы ожидали:

 (map TYPE FUNCTION SEQUENCE...)

Map a FUNCTION across one or more SEQUENCEs, returning a sequence.
TYPE is the sequence type to return.