測試Mathematica中值是否爲空的最好/最乾淨/最好的方法是什麼?而不是空?在Mathematica中測試Null而不是空
例如:
a = Null
b = 0;
f[n_] := If[n == Null, 1, 2]
f[a]
f[b]
具有這樣的結果:
1
If[0 == Null, 1, 2]
我在哪裏會預期2對於f [B]。
測試Mathematica中值是否爲空的最好/最乾淨/最好的方法是什麼?而不是空?在Mathematica中測試Null而不是空
例如:
a = Null
b = 0;
f[n_] := If[n == Null, 1, 2]
f[a]
f[b]
具有這樣的結果:
1
If[0 == Null, 1, 2]
我在哪裏會預期2對於f [B]。
正如指出的丹尼爾(和獅子座的書解釋)Null == 0
不求值True
或False
,所以If
聲明(書面),也沒有評價。 Null
是一個特殊的Symbol
,它不會在輸出中顯示,但是在所有其他方面,它的行爲就像一個普通的日常符號。
In[1]:= Head[Null]
Out[1]= Symbol
對於一些未定義的符號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 *)
使用上述,條件語句就如同你想:
In[3]:= {f[Null], f[0]}
Out[3]= {1, 2}
2)使用可選的第四個參數If
如果測試仍未評估(即,如果它既不是True
也不是False
)
g[n_] := If[n == Null, 1, 2, 3]
然後
In[5]:= {g[Null], g[0]}
Out[5]= {1, 3}
另一種可能性是有兩個DownValues,一個用於特殊條件空,和您的正常定義。這有一個好處,你不需要擔心第二個空值。
f[Null] := 1
f[x_] := x^2 (* no weird Null^2 coming out of here! *)
在謂詞測試中使用SameQ(===)而不是Equal。 –
就是這樣!平等。我必須檢查爲什麼有差異。 –
我在這裏覆蓋這個主題:http://www.mathprogramming-intro.org/book/node24.html –