【问题标题】:How do I pass arguments to map in emacs lisp?如何在emacs lisp中将参数传递给map?
【发布时间】:2011-05-21 13:03:14
【问题描述】:

我想编写一个小函数来向列表添加值。它看起来像这样:

(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 会出错,因为该函数需要一个参数。我错过了什么?

谢谢 罗伯特

【问题讨论】:

    标签: emacs lisp 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 ;-).

    【讨论】:

    • 带部分功能应用:(mapcar (apply-partially '+ 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      相关资源
      最近更新 更多