2010-12-15 15 views
14

En Python, suponiendo que la siguiente función se define:Lisp común - ¿Desempaquetar lista? (Similar a Python)

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

soy capaz de utilizar la función utilizando la secuencia de Python desembalaje:

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

¿El funcionalidad similar existe en Common Lisp ? Así que si tengo una función:

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

Y si tengo una lista de 3 elementos, que podría utilizar fácilmente los 3 elementos como parámetros a la función?

La forma en que actualmente implemento es el siguiente:

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

¿Hay una mejor manera?

Respuesta

11
+0

Tenga en cuenta que esto sólo funciona cuando sólo argumentos de la función están contenidos en la lista. De lo contrario, 'desestructurar-bind' es necesario, y coincide con la capacidad de python para' function (* args, another_arg) '. – Mark

21

Utilice la función apply:

(apply #'function arguments) 

Ejemplo:

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