Применить список к аргументам в Mathematica

как я могу применить каждый элемент в списке к каждому аргументу в функции? Вроде как Map, за исключением переменного числа аргументов.

так, например, если у меня есть функция action[x1_,x2_,x3_]:=... и у меня есть список {1,2,3} как бы я создать функцию для вызова action С action[1,2,3]?

Я хотел бы, чтобы эта функция могла обрабатывать меня изменение action to action[x1_,x2], и что-нибудь еще, также, со списком теперь {1,2}, и вызвать действие сейчас с action[1,2].

3 ответов


на основе " вроде как карта, за исключением переменного числа аргументов.- Мне кажется,вы ищете ...--6--> до уровня 1. Это делается с помощью:

Apply[function, array, {1}]

или сокращенный вариант:

function @@@ array

вот что он делает:

array = {{1, 2, 3}, {a, b, c}, {Pi, Sin, Tan}};

action @@@ array
   {action[1, 2, 3], action[a, b, c], action[Pi, Sin, Tan]}  

терминология, которую я использовал выше, может вводить в заблуждение и ограничивает силу Apply. Выражение, к которому вы применяете action не должен быть прямоугольным массивом. Это даже не нужно быть List: {...} или его элементы должны быть списками. Вот пример, включающий эти возможности:

args = {1, 2} | f[a, b, c] | {Pi};

action @@@ args
   action[1, 2] | action[a, b, c] | action[Pi] 
  • args - это не List а набор Alternatives
  • количество аргументов, переданных action зависит
  • один из элементов args голова f

заметим, что:

  • action заменяет головку каждого элемента args, что бы это ни было может быть.
  • глава args сохраняется в выводе, в данном случае Alternatives (короткая форма: a | b | c)

Apply[action, {1,2,3}]

Это также можно ввести как action @@ {1,2,3}.


Почему бы просто не использовать action[lst_?ListQ]?