olarak Daniel tarafından işaret (ve Leonid'in kitabında açıklanmıştır) True
veya False
ya değerlendirmek değil Null == 0
, böylece (yazılı olarak) If
bildiride de değerlendirin. Null
, çıktıda görüntülenmeyen özel bir Symbol
özelliğidir, ancak diğer tüm yollarda normal, günlük bir sembol gibi davranır.
In[1]:= Head[Null]
Out[1]= Symbol
bazı tanımsız sembol x
için, x
sonradan sıfır olabilir çünkü x == 0
, False
dönmek istemiyoruz. Bu yüzden Null == 0
da değerlendirmiyor.
1) Kuvvet testi TrueQ
veya SameQ
kullanarak değerlendirmek için:
Bunun iki olası düzeltmeler vardır.
n == Null
testi için, aşağıdakiler eşdeğerdir, ancak sayısal nesneleri test ederken bunlar olmayacaktır. (Equal
sayısal denklik için yaklaşık bir test kullanır olmasıdır.) Istediğiniz gibi yukarıdaki kullanarak
f[n_] := If[TrueQ[n == Null], 1, 2] (* TrueQ *)
f[n_] := If[n === Null, 1, 2] (* SameQ *)
, koşullu önerme çalışır:
In[3]:= {f[Null], f[0]}
Out[3]= {1, 2}
2) Kullanım isteğe bağlı 4 argüman Test unevaluated kalırsa döndürülür If
g[n_] := If[n == Null, 1, 2, 3]
(o ne
True
ne de
False
yani eğer)
Sonra
In[5]:= {g[Null], g[0]}
Out[5]= {1, 3}
İtiraz testinizde Equal yerine SameQ (===) kullanın. –
Bu böyle yapar! Eşit aynı. Neden bir fark olduğunu kontrol etmeliyim. –
Bu konuyu burada ele alıyorum: http://www.mathprogramming-intro.org/book/node24.html –