我应该如何编写一个在 Mathematica 中的 Apply 中使用的函数?
我想知道如何编写一个在 Mathematica 的 Apply
函数中使用的函数?例如,我想简单地重新实现 Or
函数,我发现以下代码
Apply[(#1 || #2)&,{a,b,c}]
不行,因为它只对列表中的前两个元素进行了 Or
操作。非常感谢!
I am wondering how I can write a function to be used in the Apply
function in Mathematica? For example, I want to trivially re-implement the Or
function, I found the following
Apply[(#1 || #2)&,{a,b,c}]
is not okay since it only Or
'ed the first two elements in the list. Many thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
无论有多少个变量,这都会起作用,并且是一种通用模式:
例如
,但是,在
Or
的情况下,这还不够好,因为Or
是 < code>HoldAll 和短路 - 也就是说,它在第一个True
语句处停止,并保持其余部分不被计算。示例:但这没问题:
例如,
可以在这种情况下使用(当您不希望对参数进行求值时)。请注意,这使用了未记录的函数形式。 R.Maeder 的《Programming in Mathematica》一书中提到了这种形式。
华泰
This will work, no matter how many vars, and is a general pattern:
for example
However, in the case of
Or
, this is not good enough, sinceOr
isHoldAll
and short-circuiting - that is, it stops upon firstTrue
statement, and keeps the rest unevaluated. Example:This will be ok though:
for example,
and can be used in such cases (when you don't want your arguments to evaluate). Note that this uses an undocumented form of
Function
. The mention of this form can be found in the book of R.Maeder, "Programming in Mathematica".HTH
等效
等效
应用的工作原理如下:
Equivalent
Equivalent
Apply works like this:
您确定您对Apply 的期望是正确的吗?如果您查看文档,http://reference.wolfram.com/mathematica/ref/ Apply.html,你会看到Apply[f,expr]只是用expr替换了f的头部。一般来说,它不给出f[expr]。
如果您希望使用函数 f 对 expr 进行操作,请尝试 f@expr 或 f[expr]。
也许您理解上述内容,而您的问题实际上是,“我如何定义一些 f,当我执行
Apply[f,{a,b,c}]
时,它与执行相同的工作>或者[a,b,c] 是吗?
Are you sure you are expecting the right thing from Apply? If you look in the documentation, http://reference.wolfram.com/mathematica/ref/Apply.html, you will see that Apply[f,expr] simply replaces the head of f by expr. It does not, in general, give f[expr].
If you wish to operate with function f onto expr, try f@expr or f[expr].
Perhaps you understand the above and your question really is, "how do I define some f that, when I do
Apply[f,{a,b,c}]
, does the same job asOr[a,b,c]
. Is that it?