elisp如何将lambda应用于列表?

时间:2018-06-14 21:44:08

标签: list lambda lisp elisp apply

我试图做的事情似乎很简单,不管怎么说都是一个非常愚蠢的错误,因为我无法找到其他人得到同样的错误。我只是想将一个lambda应用于一个列表 - 这里的lambda不是我真正想做的事情,但它给出了同样的错误。

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

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

2 个答案:

答案 0 :(得分:4)

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

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

将返回列表(7 8 9)

答案 1 :(得分: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演讲中不是你想要的。您希望将功能映射到列表。这意味着为列表的每个元素调用函数并返回包含结果的新列表。在Lisp 映射中调用此操作。请参阅Stefan的答案。

将一个函数应用于列表将是:使用从列表中获取的参数调用该函数。

相关问题