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,这是不够好的,因为它Or是HoldAll短路的 - 也就是说,它在第一次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
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |