我正在定义一个函数,该函数将函数作为输入,并且我想在输入类型中指定它,即 Operat[_?FunctionQ]:=... 但目前mathematica中还没有函数Q。除了根本不指定任何类型之外,我该如何解决这个问题。
有什么想法吗?
哦! 这个:Test if an expression is a Function? 可能就是我正在寻找的答案。我正在进一步阅读
那里提出的解决方案是否稳健?,即:
FunctionQ[_Function | _InterpolatingFunction | _CompiledFunction] = True;
FunctionQ[f_Symbol] := Or[
DownValues[f] =!= {},
MemberQ[ Attributes[f], NumericFunction ]]
FunctionQ[_] = False;
最佳答案
所展示的定义具有很大的实用性。问题是:Mathematica 中的函数到底是由什么构成的?纯函数等很容易归类为函数,但是涉及模式匹配的定义又如何呢?考虑:
h[g[x_]] ^:= x + 1
h
是否被视为函数?如果是这样,将很难识别,因为需要检查系统中每个品种的上值才能做出决定。 g
是一个函数吗?它有一个向上值,但 g[x]
是一个惰性表达式。
头部构成如何:
f[x_][y_][z_] := x + y + z
f
是一个函数吗? f[1]
或 f[1][2]
怎么样?
还有各种功能,例如 JLink 和 NETLink:
Needs["JLink`"]
obj = JavaNew["java.util.Date"]
obj@toString[]
obj@toString
是一个函数吗?
我讨厌在不提供解决方案的情况下提出这些问题——但我想强调,在 Mathematica 环境中什么构成函数的问题是一个棘手的问题。从理论和实践的角度来看,这都是很棘手的。
我认为所展示的功能测试是否完整的答案实际上取决于您将在特定应用程序中输入的表达式类型。
关于function - mathematica中有没有可以用来定义输入类型的函数头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686667/