Say mam foo funkcję:Jak splajnuować listę poza makrem w Common Lisp?
(defun foo (x y &rest args) ...)
I później chcą zawinąć go w pasku funkcji:
(defun bar (x &rest args) (foo x 100 args))
Załóżmy bar był wówczas nazywany tak: (bar 50 1 2 3)
Przy tym ustawieniu args jest listą wewnątrz bryły paska, która przechowuje parametry końcowe, więc kiedy przekazuję ją do foo, zamiast odbierania t on odpowiada (foo 50 100 1 2 3)
I oczywiście uzyskać (foo 50 100 '(1 2 3))
. Gdyby były to makra, użyłbym `` (foo, x 100, @ args) `w ciele paska, aby splicować args do wywołania funkcji. @ działa tylko na liście cytowanej za pomocą zwrotów.
Jak mogę zrobić ten sam rodzaj łączenia w ramach zwykłej funkcji?
To było zbyt łatwe –
+1: Uratowałeś mi dzień! A przynajmniej uratowałeś mnie przed hackowaniem bardzo brzydkiego rozwiązania. – Giorgio
Wpadłem dzisiaj na ten problem, zgłoszenie nie działa, ponieważ "funkcja", którą chciałem zastosować, jest i, co w rzeczywistości jest makrem! – PuercoPop