如何在Emacs Lisp中向map函数传递参数?

8
我想编写一个小函数来将值添加到列表中,代码如下:
(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会报错,因为该函数需要一个参数。我漏掉了什么?
谢谢 Robert
2个回答

16

这里缺少的参数是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 ;-).


6
使用部分函数应用:(mapcar(apply-partially '+ 3.02)fares) - Jürgen Hötzel

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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接