[英]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.