Wolfram mathematica 将列表应用于Mathematica中的参数

Wolfram mathematica 将列表应用于Mathematica中的参数,wolfram-mathematica,Wolfram Mathematica,如何将列表中的每个元素应用于函数中的每个参数?有点像映射,只是参数数量可变 例如,如果我有一个函数action[x1,x2,x3]:=…,我有一个列表{1,2,3},我如何创建一个函数来调用action,使用action[1,2,3] 我希望这个函数能够处理我将action更改为action[x1,x2],以及其他任何事情,同时,列表现在是{1,2},并使用action[1,2]调用action now Apply[action, {1,2,3}] 这也可以输入为action@@@1,2,3}

如何将列表中的每个元素应用于函数中的每个参数?有点像
映射
,只是参数数量可变

例如,如果我有一个函数
action[x1,x2,x3]:=…
,我有一个列表
{1,2,3}
,我如何创建一个函数来调用
action
,使用
action[1,2,3]

我希望这个函数能够处理我将
action
更改为
action[x1,x2]
,以及其他任何事情,同时,列表现在是
{1,2}
,并使用
action[1,2]
调用action now

Apply[action, {1,2,3}]
这也可以输入为
action@@@1,2,3}

基于“类似的映射,除了具有可变数量的参数。”我想您可能正在寻找
应用于级别1。这是通过以下方式完成的:

Apply[function, array, {1}]
或速记:

function @@@ array
它的作用如下:

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

action @@@ array
动作[1,2]|动作[a,b,c]|动作[Pi]
  • args
    不是一个
    列表
    ,而是一组
    备选方案
  • 传递给
    action
    的参数数量各不相同
  • args
    的一个元素具有头
    f
注意:

  • action
    替换
    args
    的每个元素的头部,不管它是什么
  • args
    的头部保留在输出中,在本例中为
    Alternatives
    (缩写:
    a | b | c

为什么不直接使用action[lst_?ListQ]?

您的解决方案与Sasha的有什么区别?我的意思是,我在你的书中看到了
@@@
,而在他的书中只看到了
@
。它们怎么可能是一样的?@d'o-o'b它们不一样,但它们用于相同的功能:
Apply
f@@@1,2,3}
给出了
f[1,2,3]
实际上是在“0级”(即
{1,2,3}
的顶层)将
列表
替换为
f
)。相比之下,
f@@@f{1}、{2}、{3}
给出了{f[1]、f[2]、f[3]},将列表的每个元素或“级别1”的
f
替换为
f
。也可以使用
Apply[f,expression,levelspec]
对表达式的更深层次执行此操作,但没有速记(如
@
)为了这个。有关levelspec的详细信息,请参阅
级别的帮助。这是您要回答的问题吗?
   {action[1, 2, 3], action[a, b, c], action[Pi, Sin, Tan]}  
args = {1, 2} | f[a, b, c] | {Pi};

action @@@ args
action[1, 2] | action[a, b, c] | action[Pi]