Применить список к аргументам в 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
)