Wolfram mathematica 检查是否定义了符号

Wolfram mathematica 检查是否定义了符号,wolfram-mathematica,Wolfram Mathematica,有没有一种简单的方法来检查x是否有定义?我需要一个需要 格式为f、f[\u]或f[\u][\ u]的内容,如果有定义,则返回True 具体来说,我使用f[x]=b和g[x][y]=z这样的结构来存储东西,我需要检查f[x]是否对某些列表中的每个x都有定义,以及g[x][y]是否对某些值集中的每个x,y都有定义 对于系统“”中的符号,请检查ArgumentsPattern选项的SyntaxInformation 对于其他符号,请选中向下值、向上值、子值等 预期用途是什么?如果我理解正确,我认为功

有没有一种简单的方法来检查x是否有定义?我需要一个需要 格式为
f
f[\u]
f[\u][\ u]
的内容,如果有定义,则返回
True

具体来说,我使用f[x]=b和g[x][y]=z这样的结构来存储东西,我需要检查f[x]是否对某些列表中的每个x都有定义,以及g[x][y]是否对某些值集中的每个x,y都有定义

  • 对于系统“”中的符号,请检查ArgumentsPattern选项的SyntaxInformation
  • 对于其他符号,请选中向下值、向上值、子值等

预期用途是什么?

如果我理解正确,我认为功能
ValueQ
就是您想要的。如果变量或函数已定义,则返回true;如果未定义,则返回false


请阅读

的更多信息实际上,ValueQ函数并不是无辜的,因为它会泄漏代码的求值结果,并产生副作用。示例:

ClearAll[f, g]; 
f[x_] := Print[x]; 
g[x_][0] := Print[x];
{ValueQ[f[1]],ValueQ[g[2][0]]}
如果您删除ValueQ的ReadProtected属性并查看代码,您将看到原因-代码非常简单,并且只对自己的值做了相当好的工作。下面是我为避免这个问题而开发的一个更复杂的版本(您可以测试,至少对于上面的示例,它不会泄漏评估):


这也是不完整的,因为它不考虑upvalue、nvalue和formatvalue,但这似乎足以满足您所述的需求,而且,这三种额外情况的规则也可以按照上述相同的思路添加

如果所讨论的对象有足够的内部结构,这是一个很好的简单解决方案

你可以用

Length[variable]
检测
变量
是否已分配给具有多个部件的对象。因此:

Remove[variable]
Length[variable]
(*---> 0*)
variable={1,2,3};
Length[variable]
(*---> 3*)
在后一种情况下,您可以使用
Length[variable]>0
获得
True

但是,如果有可能将
变量
指定给一个原子值,例如单个字符串或数字,则此操作将失败:

variable=1
Length[variable]
(*---> 0*)

我有一个函数,如果在缺少某些定义的情况下运行它,会出现大量错误,因此我想添加自动检查,以中止并按照“error,xyz[][]not defined”
DownValues
帮助我检查函数是否已定义,如果调用为
ValueQ[myFunc[x]]
,则
ValueQ
将不起作用或将对函数求值。我认为ValueQ对我有效,因为我使用f[]和f[][]作为存储常量的字典,但如果有更一般的需要,我会记住这个方法,谢谢
variable=1
Length[variable]
(*---> 0*)