空のすべてのものが同じ答えを与えるはずです。しかし、ここでは彼らは別の答えを出しており、すべてと空のすべてが真です。誰でも matlabs のこの動作を説明できますか (バージョン 2010a->2012b でテスト済み)。
>>任意([])
ans =
0
しかし
>> すべて([])
ans =
1
空のすべてのものが同じ答えを与えるはずです。しかし、ここでは彼らは別の答えを出しており、すべてと空のすべてが真です。誰でも matlabs のこの動作を説明できますか (バージョン 2010a->2012b でテスト済み)。
>>任意([])
ans =
0
しかし
>> すべて([])
ans =
1
この動作は明示的に文書化されています:
http://www.mathworks.co.uk/help/matlab/ref/any.htmlから:
Aが空の場合、any(A)論理0(false) を返します。
http://www.mathworks.co.uk/help/matlab/ref/all.htmlから:
Aが空の場合、all(A)論理1(true) を返します。
の振る舞いallは少し直感に反すると思います。推測では、対称性のために、次の等価性が保持されることを意図していると思います。
~all(A) == any(~A)
    anyall空の配列では絶対に同じ答えを出すべきではありません.MATLABの動作は文書化されており、正しいものです。
any(A)は「真であるという要素が存在するA」、つまり
∃x∈A x は true
には要素がないためA、正しく返されますfalse。
all(A)「 のすべての要素についてA、その要素が true である」、つまり
∀x∈A x は true
おそらくこれはあまり直感的ではありませんが、 には要素がないためA、この文は真であり、MATLAB は正しく を返しますtrue。一階論理の教科書は、これを確認します。
MATLAB の動作が実際に間違っているように見え、上記と矛盾する場合が必要な場合は、次を試してください。
>> if [] disp('hello'); else disp('bye'); end
bye
それ以外の場合if Xはtrueすべて、 のすべての要素Xが true の場合です。しかし、Xがの場合[]、if動作が異なります。それも文書化されています。