Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica Mathematica中Null和notnull的测试_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica Mathematica中Null和notnull的测试

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是一种特殊的符号,它不显示在输出中,但在所

在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
是一种特殊的
符号
,它不显示在输出中,但在所有其他方面都像普通的日常符号

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! *)