mathematica 中是不是有可用于定义输入类型的函数头?

Posted

技术标签:

【中文标题】mathematica 中是不是有可用于定义输入类型的函数头?【英文标题】:Is there a function head in mathematica that can be used to define an input type?mathematica 中是否有可用于定义输入类型的函数头? 【发布时间】:2011-08-06 21:33:30 【问题描述】:

我正在定义一个将函数作为输入的函数,并且我想在输入类型中指定它,即Operat[_?FunctionQ]:=... 但是在mathematica中还没有functionQ。除了根本不指定任何类型之外,我该如何解决这个问题。

有什么想法吗?

哦! 这个:Test if an expression is a Function? 可能是我正在寻找的答案。我正在进一步阅读

那里提出的解决方案是否可靠?,即:

FunctionQ[_Function | _InterpolatingFunction | _CompiledFunction] = True;
FunctionQ[f_Symbol] := Or[
  DownValues[f] =!= , 
  MemberQ[ Attributes[f], NumericFunction ]]
FunctionQ[_] = False;

【问题讨论】:

Test if an expression is a Function?的可能重复 @Mr. Wizard:我只是想确保那里提出的解决方案是稳健的。我想在找到 Test if an expression is a Function 之后删除这个问题,我可能仍然这样做......特别是 _Function | _插值函数 | _CompiledFunction 涵盖所有内容? 菲尔,“惩罚”你并不是我的本意。我只是认为,如果将这两个问题结合起来,社区会得到更好的服务。我建议不要创建您打算稍后删除的问题;几天前我试过了,但效果并不好。 :-) @Wizard 先生,在提出一个单独的问题时,我希望讨论一个函数测试的稳健性以及这种测试的计算效率如何,对于测试本身和它如何影响将函数作为输入的函数的计算速度。我觉得这将是一个单独的焦点,以保证一个不同的问题。 @WReach 的回答朝那个方向发展。您如何在不删除提供的答案的情况下合并问题?谢谢 菲尔,我不反对这种推理。在这一点上,我相信主持人必须进行合并。 【参考方案1】:

展示的定义具有很大的实用性。问题是:究竟是什么构成了 Mathematica 中的 函数?纯函数等很容易归类为函数,但是涉及模式匹配的定义呢?考虑:

h[g[x_]] ^:= x + 1

h 是否被视为一个函数?如果是这样,将很难识别,因为这将需要检查系统中每个符号的向上值来做出决定。 g 是一个函数吗?它有一个向上值,但g[x] 是一个惰性表达式。

头部组成呢:

f[x_][y_][z_] := x + y + z

f 是一个函数吗? f[1]f[1][2] 怎么样?

还有像JLinkNETLink这样的各种功能:

Needs["JLink`"]
obj = JavaNew["java.util.Date"]
obj@toString[]

obj@toString 是一个函数吗?

我讨厌在不提供解决方案的情况下提出这些问题——但我想强调的是,关于在 Mathematica 上下文中什么构成函数的问题是一个棘手的问题。从理论和实践的角度来看,这都很棘手。

我认为展示的功能测试是否完整的答案实际上取决于您将在特定应用程序中提供的表达式类型。

【讨论】:

@WReach:这是一个很棒的(!)非答案,因为它探索得比我在这里描述的潜在陷阱要好。我想知道不定义类型是否不安全,但我不知道它如何影响计算速度...... 指出了许多我认为不是头部Function(甚至Symbol)的函数形式。我将给出与我总是给其他人相同的建议:不要t 尝试对函数进行类型检查。如果您正在编写可以将函数作为参数的东西,请将任何其他未知的输入视为函数,并检查结果的正确性,而不是尝试预先检查输入。 (通常我第一次被忽略。但他们最终会学习。) Brett,我就是这么想的,但我想要一些可以高效计算的东西,而且我想最终编译这个函数。 我第二个@Brett - 通常,在我看来,尝试对函数进行类型检查就像与(无类型的)Mathematica 语言作斗争,而与该语言作斗争很少有回报。在其他情况下,打字在 mma 中可能是有益的(例如,实现抽象数据类型),但显然不是这样。而且,正如@WReach 所证明的那样,这甚至很难定义好,更不用说变得健壮了。下面是一个相关 MathGroup 讨论的链接:groups.google.com/group/comp.soft-sys.math.mathematica/…

以上是关于mathematica 中是不是有可用于定义输入类型的函数头?的主要内容,如果未能解决你的问题,请参考以下文章

是否有可用于跟踪用户活动的框架?

mathematica中怎么定义一个变量为正整数?

怎么用mathematica算函数的最大值

mathematica能绘制自定义函数曲线吗

Wolfram Mathematica 中是不是有 HashTable 结构?

在 Mathematica 中最小化自定义分布的 NExpectation