我想编写一个小函数来为列表添加值。它看起来像这样:
(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 barfs因为函数需要一个参数。我错过了什么?
由于 罗伯特
答案 0 :(得分:16)
此处没有足够参数的函数是map
,而不是您定义的函数。
Emacs Lisp中不存在map
函数,它由cl
包提供。这个map
函数需要3个参数,第一个必须是map
应该返回的类型。这样:
(map 'list 'plus-extra fares)
会奏效。但你想要的是:
(mapcar 'plus-extra fares)
是本地的elisp。
PS:不要忘记Emacs附带文档! C-h f map RET ; - )。答案 1 :(得分:7)
使用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.