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

Phi*_*hil 7 types functional-programming wolfram-mathematica function operators

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

有任何想法吗?

哦! 这:测试表达式是否为函数? 可能是我正在寻找的答案.我正在进一步阅读

提出的解决方案是否健壮?,即:

FunctionQ[_Function | _InterpolatingFunction | _CompiledFunction] = True;
FunctionQ[f_Symbol] := Or[
  DownValues[f] =!= {}, 
  MemberQ[ Attributes[f], NumericFunction ]]
FunctionQ[_] = False;
Run Code Online (Sandbox Code Playgroud)

WRe*_*ach 7

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

h[g[x_]] ^:= x + 1
Run Code Online (Sandbox Code Playgroud)

是否h被视为功能?如果是这样,将难以识别,因为它将需要检查系统中每个符号的上升值以进行该确定.是g功能吗?它具有上升值,但是g[x]是惰性表达式.

头部成分怎么样:

f[x_][y_][z_] := x + y + z
Run Code Online (Sandbox Code Playgroud)

f功能吗?怎么样f[1]还是f[1][2]

然后有JLinkNETLink等各种功能:

Needs["JLink`"]
obj = JavaNew["java.util.Date"]
obj@toString[]
Run Code Online (Sandbox Code Playgroud)

obj@toString功能吗?

我讨厌在没有提供解决方案的情况下提出这些问题 - 但我想强调的是,在Mathematica环境中构成函数的问题是一个棘手的问题.从理论和实践的角度来看都很棘手.

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

  • 指出了许多形式,我认为这些形式不是头部"功能"(甚至是"符号").我将提供相同的建议,我总是给别人:不要尝试打字检查功能.如果您正在编写可以将函数作为参数的内容,请将任何其他未知输入视为函数,并检查结果是否正确,而不是尝试预先检查输入.(通常我第一次被忽略.但他们最终会学习.) (4认同)