如何在emacs lisp中将参数传递给map?

时间:2011-05-21 13:03:15

标签: 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 barfs因为函数需要一个参数。我错过了什么?

由于 罗伯特

2 个答案:

答案 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.