我应该如何编写要在Mathematica中应用的函数?

Qia*_* Li 3 wolfram-mathematica

我想知道如何编写一个Apply在Mathematica函数中使用的函数?例如,我想简单地重新实现该Or功能,我发现了以下内容

Apply[(#1 || #2)&,{a,b,c}]
Run Code Online (Sandbox Code Playgroud)

不好,因为它只Or列出了列表中的前两个元素.非常感谢!

Leo*_*rin 11

无论有多少个变量,这都可行,并且是一般模式:

Or[##]&,
Run Code Online (Sandbox Code Playgroud)

例如

In[5]:= Or[##] & @@ {a, b, c}

Out[5]= a || b || c
Run Code Online (Sandbox Code Playgroud)

然而,在这种情况下Or,这是不够好的,因为它OrHoldAll短路的 - 也就是说,它在第一次True声明时停止,并使其余部分保持不被评估.例:

In[6]:= Or[True, Print["*"]]

Out[6]= True

In[7]:= Or[##] & @@ Hold[True, Print["*"]]

During evaluation of In[7]:= *

Out[7]= True
Run Code Online (Sandbox Code Playgroud)

这样就可以了:

Function[Null,Or[##],HoldAll],
Run Code Online (Sandbox Code Playgroud)

例如,

In[8]:= Function[Null, Or[##], HoldAll] @@ Hold[True, Print["*"]]

Out[8]= True
Run Code Online (Sandbox Code Playgroud)

并且可以在这种情况下使用(当您不希望您的参数进行评估时).请注意,这使用了未记录的形式Function.提到这种形式可以在R.Maeder的书中找到,"Programming in Mathematica".

HTH