Скажите, что у меня есть функциональное нечто:
(defun foo (x y &rest args) ...)
И я позже хочу перенести его с функциональной панелью:
(defun bar (x &rest args) (foo x 100 args))
Предположите, что панель затем назвали как это: (bar 50 1 2 3)
С этой установкой args является списком в теле панели, которая содержит запаздывающие параметры, поэтому когда я передаю его нечто, вместо того, чтобы получить эквивалент (foo 50 100 1 2 3)
Я, конечно, добираюсь (foo 50 100 '(1 2 3))
. Если бы они были макросами, то я использовал бы'' (нечто, x 100 ,@args)' в теле панели для соединения args в вызов функции. ,@ только работает в заключенном в кавычки из обратной галочки списке, как бы то ни было.
Как я могу сделать этот тот же вид соединения в регулярной функции?
APPLY вызовет свой первый аргумент с его последующими аргументами, а последний аргумент должен быть списком. Итак:
(apply #'foo x 100 args)