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)
展出的定义具有很大的实用性.问题是: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]?
然后有JLink和NETLink等各种功能:
Needs["JLink`"]
obj = JavaNew["java.util.Date"]
obj@toString[]
Run Code Online (Sandbox Code Playgroud)
是obj@toString功能吗?
我讨厌在没有提供解决方案的情况下提出这些问题 - 但我想强调的是,在Mathematica环境中构成函数的问题是一个棘手的问题.从理论和实践的角度来看都很棘手.
我认为展示的功能测试是否完整的答案实际上取决于您将在特定应用程序中提供它的表达类型.