Common Lisp - Распаковка списка?(похоже на Python) - PullRequest
15 голосов
/ 15 декабря 2010

В 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 ]

21 голосов
/ 15 декабря 2010

Используйте функцию apply:

(apply #'function arguments)

Пример:

CL-USER> (apply #'(lambda (a b c) (+ a b c)) '(1 2 3))
6   
11 голосов
/ 15 декабря 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...