Mathematicaで値がNullであるかどうかをテストするには最高の/最もクリーンな方法が勧められますか?そして、Nullではない?例えばMathematicaでヌルとヌルでないことをテストする
:F 2の[B]こと思っただろう
1
If[0 == Null, 1, 2]
:
a = Null
b = 0;
f[n_] := If[n == Null, 1, 2]
f[a]
f[b]
結果を有しています。
Mathematicaで値がNullであるかどうかをテストするには最高の/最もクリーンな方法が勧められますか?そして、Nullではない?例えばMathematicaでヌルとヌルでないことをテストする
:F 2の[B]こと思っただろう
1
If[0 == Null, 1, 2]
:
a = Null
b = 0;
f[n_] := If[n == Null, 1, 2]
f[a]
f[b]
結果を有しています。
としても評価しない(書かれた)Null == 0
がTrue
またはFalse
、そうIf
文のいずれかに評価されないダニエルが指摘(とレオニードの本で説明しました)。 Null
は、出力には表示されない他のすべての方法で、通常の毎日のシンボルのように機能する特別なSymbol
です。いくつかの未定義のシンボルx
については
In[1]:= Head[Null]
Out[1]= Symbol
x
が、後にゼロになる可能性があるので、あなたは、x == 0
はFalse
を返すようにしたくありません。このため、Null == 0
も評価されません。
1)フォーステストがTrueQ
またはSameQ
を使用して評価する:
は、このための2つの可能な修正があります。
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
でもない場合)
その後
In[5]:= {g[Null], g[0]}
Out[5]= {1, 3}
別の可能性としては2 DownValues、特殊な条件のヌルのための1つ、および通常の定義を持つことです。これは、2番目のものでNullを心配する必要がないという利点があります。
f[Null] := 1
f[x_] := x^2 (* no weird Null^2 coming out of here! *)
述語テストでは、Equalの代わりにSameQ(===)を使用します。 –
それはそうです!同じです。なぜ違いがあるのかを確認する必要があります。 –
私はここでこのトピックをカバーしています:http://www.mathprogramming-intro.org/book/node24.html –