2010-12-15 7 views
14

В Python, предполагая, что следующая функция определена:Common Lisp - Список распаковки? (По аналогии с Python)

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

Я могу использовать функцию, используя последовательность Питона распаковка:

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)) 

Есть ли лучший способ?

ответ

11
+0

Обратите внимание, что это работает только, когда только аргументов функции содержатся в списке. В противном случае требуется `destructuring-bind` и соответствует способности python выполнять` function (* args, another_arg) `. – Mark 2016-12-09 15:41:26

21

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

(apply #'function arguments) 

Пример:

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

 Смежные вопросы

  • Нет связанных вопросов^_^