Am 15.01.21 um 13:44 schrieb Artur Tarassow:
Am 15.01.21 um 12:43 schrieb Riccardo (Jack) Lucchetti:
> On Fri, 15 Jan 2021, Artur Bala wrote:
>
>> Dear developers,
>> I thought that the following "if" conditions are supposed to give the
>> same
>> results but they actually don't. And the 2nd "if" block ignores
"NA"
>> values
>
> Interesting.
>
> The problem you report can be exemplified even more easily as
>
> <hansl>
> scalar z = NA
> if z < 0
> print "A"
> else
> print "B"
> endif
> </hansl>
>
> I'm not sure what we should do in an "if" block if the condition is
> neither true or false. At the moment, we treat NA as true (because
> it's non-zero), but I wonder if we should throw an error instead.
For instance, the golang compiler say in this situation "non-boolean
condition in if statement" for:
<go>
foo := math.NaN
if foo {
println("something")
}
</go>
I think we should also throw an error.
Ok, let me elaborate on this:
Julia throws "TypeError: non-boolean (Missing) used in boolean context"
<julia>
foo = missing
actual = 0
if foo
actual += 1
end
println(actual)
</julia
Python does not throw an error and returns "1"
<python>
import math
foo = math.nan
actual = 0
if foo:
actual += 1
print(actual)
</python>
So, two of the three languages I used throw an error. Python is known
for its rather "sloppy" handling of types :-D
Artur