【问题标题】:elisp how to apply a lambda to a list?elisp 如何将 lambda 应用于列表?
【发布时间】:2018-11-24 18:06:38
【问题描述】:

我正在尝试做的事情似乎很简单,任何错误都必须是一个非常愚蠢的错误,因为我找不到其他人也遇到同样的错误。我只想将 lambda 应用于列表 - 这里的 lambda 并不是我真正想要做的,但它给出了同样的错误。

(apply
(lambda (arg)
  (+ 5 arg)
)
(list 2 3 4)
)

当我尝试运行它时,它告诉我我正在向 lambda 传递无效数量的参数。你有什么建议吗?

【问题讨论】:

    标签: list lambda lisp elisp apply


    【解决方案1】:

    apply 调用函数一次,将您作为参数提供的列表传递给它。我想你想改用mapcar:

    M-: (mapcar (lambda (arg) (+ 5 arg)) (list 2 3 4)) RET
    

    将返回列表(7 8 9)

    【讨论】:

      【解决方案2】:

      只是为了让问题更清楚一点:

      这个表格

      (apply
       (lambda (arg)
         (+ 5 arg))
       (list 2 3 4))
      

      基本类似

      (funcall
       (lambda (arg)
         (+ 5 arg))
       2
       3
       4)
      

      在上面我们尝试用一个参数arg 和三个参数调用一个函数。

      现在,如果您想传递多个参数并将其作为单个列表接收,则需要一个带有 &rest 参数的函数:

      (lambda (&rest args) ...)
      

      你说

      我只想应用一个 lambda

      这不是你想要的。您想将函数映射到列表上。这意味着为列表的每个元素调用函数并返回一个带有结果的新列表。这个操作在 Lisp mapping 中被调用。以 Stefan 的回答为例。

      将函数应用到列表将是:使用从列表中获取的参数调用函数。

      【讨论】:

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