elisp 如何将 lambda 应用于列表?
elisp how to apply a lambda to a list?
我正在尝试做的事情看起来很简单,无论有什么问题都一定是一个非常愚蠢的错误,因为我找不到其他人得到同样的错误。我只想将 lambda 应用于列表 - 这里的 lambda 并不是我真正想要做的,但它给出了同样的错误。
(apply
(lambda (arg)
(+ 5 arg)
)
(list 2 3 4)
)
当我尝试 运行 时,它告诉我我正在向 lambda 传递无效数量的参数。你有什么建议吗?
apply
调用函数 once,将您作为参数给出的列表传递给它。我想你反而想使用 mapcar
:
M-: (mapcar (lambda (arg) (+ 5 arg)) (list 2 3 4)) RET
将return列表(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) ...)
你说
I just want to apply a lambda
这不是你想要的。您想要 将函数映射到列表 上。这意味着为列表的每个元素调用函数并返回一个包含结果的新列表。这个操作在 Lisp mapping 中被调用。有关示例,请参阅 Stefan 的回答。
将函数应用于列表将是:使用从列表中获取的参数调用函数。
我正在尝试做的事情看起来很简单,无论有什么问题都一定是一个非常愚蠢的错误,因为我找不到其他人得到同样的错误。我只想将 lambda 应用于列表 - 这里的 lambda 并不是我真正想要做的,但它给出了同样的错误。
(apply
(lambda (arg)
(+ 5 arg)
)
(list 2 3 4)
)
当我尝试 运行 时,它告诉我我正在向 lambda 传递无效数量的参数。你有什么建议吗?
apply
调用函数 once,将您作为参数给出的列表传递给它。我想你反而想使用 mapcar
:
M-: (mapcar (lambda (arg) (+ 5 arg)) (list 2 3 4)) RET
将return列表(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) ...)
你说
I just want to apply a lambda
这不是你想要的。您想要 将函数映射到列表 上。这意味着为列表的每个元素调用函数并返回一个包含结果的新列表。这个操作在 Lisp mapping 中被调用。有关示例,请参阅 Stefan 的回答。
将函数应用于列表将是:使用从列表中获取的参数调用函数。