2010-12-15 13 views
14

W Pythonie, przyjmując następującą funkcję definiuje:Common Lisp - Lista rozpakowywania? (Podobnie jak w Pythonie)

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

jestem w stanie korzystać z funkcji za pomocą sekwencji Pythona rozpakowaniu:

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

Does podobną funkcjonalność istnieje w Common Lisp ? Tak więc, jeśli mam funkcję:

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

A jeśli mam listę 3 elementów, mogę łatwo wykorzystać te 3 elementy jako parametry do funkcji?

Sposób, w jaki obecnie wdrożyć go jest następujący:

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

Czy istnieje lepszy sposób?

Odpowiedz

11
+0

Zauważ, że to działa tylko, gdy tylko argumenty funkcji są zawarte w wykazie. W przeciwnym razie potrzebne jest 'destructuring-bind', i dopasowuje zdolność Pythona do zrobienia' function (* args, another_arg) '. – Mark

21

Użyj apply funkcja:

(apply #'function arguments) 

Przykład:

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