Condition
имеет атрибут HoldAll
, который предотвращает оценку его первого аргумента перед применением Condition
. Но по какой-то причине Condition
оценивает свой первый аргумент, даже если тест дает False
:
In[1]:= Condition[Print[x],False]
During evaluation of In[1]:= x
Out[1]= Null/;False
Почему это? Для каких целей Condition
оценивает свой первый аргумент, если тест дает False
? В каких случаях это поведение может быть полезно?
P.S. Его поведение отличается, когда Condition
используется в качестве второго аргумента SetDelayed
:
In[5]:= f:=Condition[Print[x],False]; f
Out[6]= f
Это то, что я ожидал от всех случаев.