gpt4 book ai didi

wolfram-mathematica - 测试表达式是否为函数?

转载 作者:行者123 更新时间:2023-12-04 08:18:09 25 4
gpt4 key购买 nike

函数FunctionQ的外观如何,也许以某种方式甚至可以指定允许的参数数量?

最佳答案

在Simon和Daniel之后,我真的很难过,但是他们的代码在不是符号的非功能上失败了。如Simon所建议的那样进行检查并通过NumericFunction添加对内建函数的检查,我们得出类似

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

在某些(叹气)现实情况下应该可以使用
In[17]:= 
FunctionQ/@{Sin,Function[x,3x], Compile[x,3 x],Interpolation[Range[5]],FunctionQ,3x,"a string", 5}
Out[17]= {True,True,True,True,True,False,False,False}

如果您知道要查找的函数的签名(即有多少个参数和哪种类型),我将与Simon达成共识,即方法是鸭子输入:将函数 Apply转换为典型参数,然后寻找有效的输出。缓存可能是值得的:
AlternativeFunctionQ[f_]:=AlternativeFunctionQ[f]=
With[{TypicalArgs={1.0}},NumericQ[Apply[f,TypicalArgs]]];

In[33]= AlternativeFunctionQ/@{Sin,Function[x,3x], Compile[x, 3x],Interpolation[Range[5]],FunctionQ,3x,"a string", 5}
Out[34]= {True,True,True,True,False,False,False,False}

关于wolfram-mathematica - 测试表达式是否为函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com