Применить список к аргументам в Mathematica - PullRequest
9 голосов
/ 21 апреля 2011

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

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

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

Ответы [ 3 ]

11 голосов
/ 21 апреля 2011

Основано на «Типе подобной карты, кроме с переменным числом аргументов».Я думаю, что вы можете искать Apply до уровня 1. Это делается с:

Apply[function, array, {1}]

или сокращением:

function @@@ array

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

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

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

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

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

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

Обратите внимание:

  • action заменяетзаголовок каждого элемента args, каким бы он ни был.
  • Заголовок args сохраняется на выходе, в данном случае Alternatives (краткая форма: a | b | c)
8 голосов
/ 21 апреля 2011
Apply[action, {1,2,3}]

Это также может быть введено как action @@ {1,2,3}.

0 голосов
/ 22 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...