Wolfram mathematica Mathematica中Null和notnull的测试
在Mathematica中测试值是否为空的最佳/最干净/可取的方法是什么?而且不是空的 例如:Wolfram mathematica Mathematica中Null和notnull的测试,wolfram-mathematica,Wolfram Mathematica,在Mathematica中测试值是否为空的最佳/最干净/可取的方法是什么?而且不是空的 例如: a = Null b = 0; f[n_] := If[n == Null, 1, 2] f[a] f[b] 结果是: 1 If[0 == Null, 1, 2] 在这里,我本以为f[b]的2。正如Daniel所指出的(并在Leonid的书中解释)Null==0既不计算为True也不计算为False,因此If语句(如所写)也不计算。 Null是一种特殊的符号,它不显示在输出中,但在所
a = Null
b = 0;
f[n_] := If[n == Null, 1, 2]
f[a]
f[b]
结果是:
1
If[0 == Null, 1, 2]
在这里,我本以为f[b]的2。正如Daniel所指出的(并在Leonid的书中解释)Null==0
既不计算为True
也不计算为False
,因此If
语句(如所写)也不计算。
Null
是一种特殊的符号
,它不显示在输出中,但在所有其他方面都像普通的日常符号
In[1]:= Head[Null]
Out[1]= Symbol
对于某些未定义的符号x
,您不希望x==0
返回False
,因为x
以后可能为零。这就是为什么Null==0
也不进行计算的原因
有两种可能的修复方法:
1)使用TrueQ
或SameQ
强制测试进行评估对于
n==Null
测试,以下内容将等效,但在测试数字对象时,它们将不等效。(这是因为Equal
对数值等效性使用近似测试。)
使用上述方法,条件语句可以按您的需要工作:
In[3]:= {f[Null], f[0]}
Out[3]= {1, 2}
2)使用可选的If
第四个参数,该参数在测试保持未评估状态时返回(即,如果既不是True
也不是False
)
然后
另一种可能是有两个downValue,一个用于特殊条件Null,另一个用于正常定义。这样做的好处是,您不需要担心第二个文件中的Null
f[Null] := 1
f[x_] := x^2 (* no weird Null^2 coming out of here! *)
在谓词测试中使用SameQ(==)而不是Equal。就是这样!同样的。我必须检查一下为什么会有不同。我在这里讨论了这个话题:你的书在这个网站上看起来不错。
g[n_] := If[n == Null, 1, 2, 3]
In[5]:= {g[Null], g[0]}
Out[5]= {1, 3}
f[Null] := 1
f[x_] := x^2 (* no weird Null^2 coming out of here! *)