#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.