繁体   English   中英

elisp如何将lambda应用于列表?

[英]elisp how to apply a lambda to a list?

我正在尝试做的事情似乎很简单,出了什么问题一定是一个非常愚蠢的错误,因为我找不到其他人遇到相同的错误。 我只想将lambda应用于列表-这里的lambda不是我真正想要做的,但是它给出了相同的错误。

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

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

apply 一次调用该函数,并将您作为参数给出的列表传递给该函数。 我想您反而想使用mapcar

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

将返回列表(7 8 9)

为了使问题更清楚:

这种形式

(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的答案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM