nil*_*ock 12 wolfram-mathematica
在Mathematica中测试值是否为Null的最佳/最干净/可取的方法是什么?而不是空的?
例如:
a = Null
b = 0;
f[n_] := If[n == Null, 1, 2]
f[a]
f[b]
Run Code Online (Sandbox Code Playgroud)
得到的结果是:
1
If[0 == Null, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我希望f [b]的2.
Sim*_*mon 12
正如丹尼尔指出(在狮子座的书解释)Null == 0不求值True或False,所以If说明(书面),也没有评价.
Null是一种特殊的Symbol,不会在输出中显示,但在所有其他方面,就像一个普通的日常符号.
In[1]:= Head[Null]
Out[1]= Symbol
Run Code Online (Sandbox Code Playgroud)
对于某些未定义的符号x,您不希望x == 0返回False,因为x稍后可能为零.这就是为什么Null == 0也不评估.
有两种可能的解决方法:
1)强制测试使用TrueQ或评估SameQ.
对于n == Null测试,以下将是等效的,但是在测试数字对象时,它们不会.(这是因为Equal对数值等价使用近似检验.)
f[n_] := If[TrueQ[n == Null], 1, 2] (* TrueQ *)
f[n_] := If[n === Null, 1, 2] (* SameQ *)
Run Code Online (Sandbox Code Playgroud)
使用上面的条件语句可以按照您的意愿工作:
In[3]:= {f[Null], f[0]}
Out[3]= {1, 2}
Run Code Online (Sandbox Code Playgroud)
2)If如果测试仍然没有评估(即如果它既不是True也没有False),则使用可选的第四个参数返回
g[n_] := If[n == Null, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
然后
In[5]:= {g[Null], g[0]}
Out[5]= {1, 3}
Run Code Online (Sandbox Code Playgroud)
另一种可能性是有两个DownValues,一个用于特殊条件Null,以及你的正常定义.这样做的好处是你不需要担心第二个Null.
f[Null] := 1
f[x_] := x^2 (* no weird Null^2 coming out of here! *)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5754 次 |
| 最近记录: |