Как я соединяю в список за пределами макроса в языке Common LISP?

Скажите, что у меня есть функциональное нечто:

(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 в вызов функции. ,@ только работает в заключенном в кавычки из обратной галочки списке, как бы то ни было.

Как я могу сделать этот тот же вид соединения в регулярной функции?

18
задан derefed 13 April 2010 в 05:52
поделиться

1 ответ

APPLY вызовет свой первый аргумент с его последующими аргументами, а последний аргумент должен быть списком. Итак:

(apply #'foo x 100 args)
33
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: