function - mathematica中有没有可以用来定义输入类型的函数头?

标签 function types operators wolfram-mathematica functional-programming

我正在定义一个函数,该函数将函数作为输入,并且我想在输入类型中指定它,即 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] 怎么样?

还有各种功能,例如 JLinkNETLink:

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

obj@toString 是一个函数吗?

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

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

关于function - mathematica中有没有可以用来定义输入类型的函数头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686667/

相关文章:

haskell - do block 中的返回类型

c++:在另一个类的函数中返回对象

java - 两个 Java 运算符之间的区别 : ! = vs !equals

c++ - 作为函数参数的 THREADENTRY32 结构数组导致 C2061

c - 当我尝试在 C 中调用带参数的函数时出现错误 "error: expected expression before..."

php - 如何从 PHP 中的用户输入中删除 URL 协议(protocol)和斜杠

php - 如何在 PHP 类中定义数组属性

c++ - 我可以通过此类的实例访问类的成员类型吗?

c++ - 在 C++ 中使用运算符 < 对字符串进行排序

c# - C# 的常见操作成本?