我想编写一个小函数来为列表添加值.它看起来像这样:
(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因为函数需要一个参数.我错过了什么?
谢谢罗伯特
p4b*_*bl0 16
这里没有足够参数的函数不是map
你定义的函数.
该map
函数在Emacs Lisp中不存在,它由cl
包提供.这个map
函数需要3个参数,第一个必须是map
应返回的类型.这个:
(map 'list 'plus-extra fares)
Run Code Online (Sandbox Code Playgroud)
将工作.但你想要的是这个:
(mapcar 'plus-extra fares)
Run Code Online (Sandbox Code Playgroud)
这是本地的elisp.
PS:别忘了Emacs附带了它的文档!C-h f map RET;-).
使用mapcar
,而不是map
.用mapcar
,你的例子产生:
(34.160000000000004 31.14 28.12 25.099999999999998 22.08 19.06 16.04 13.02)
Run Code Online (Sandbox Code Playgroud)
如果您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.
Run Code Online (Sandbox Code Playgroud)