Common Lisp -- 列表解包?(类似Python)

17 投票
2 回答
3247 浏览
提问于 2025-04-16 08:35

在Python中,假设定义了以下这个函数:

def function(a, b, c):
    ... do stuff with a, b, c ...

我可以通过Python的序列解包来使用这个函数:

arguments = (1, 2, 3)
function(*arguments)

那么在Common Lisp中有没有类似的功能呢?也就是说,如果我有一个函数:

(defun function (a b c)
    ... do stuff with a, b, c ...

而且我有一个包含3个元素的列表,我能不能很方便地把这3个元素作为参数传给这个函数呢?

我现在的实现方式是这样的:

(destructuring-bind (a b c) (1 2 3)
    (function a b c))

有没有更好的方法呢?

2 个回答

23

使用 apply 函数:

(apply #'function arguments)

举个例子:

CL-USER> (apply #'(lambda (a b c) (+ a b c)) '(1 2 3))
6   
11

apply 是一个函数,通常用来处理多个参数。它的作用是把一组参数传递给另一个函数,让这个函数可以使用这些参数。

撰写回答