Vielleicht ist das Vergleichen von ASTs keine sehr häufige Operation, aber ich bin auf Folgendes gestoßen, das ich überraschend fand. Ich denke, es ist sogar vertretbar, dass ==
die Tatsache ignorieren sollte, dass NaNs numerisch nicht gleich sind, da es sich nicht wirklich um einen numerischen Vergleich handelt.
julia> :(f($NaN)) == :(f($NaN))
false
julia> isequal(:(f($NaN)), :(f($NaN)))
false
Es sieht so aus, als bräuchten wir eine isequal
-Methode für Expr, die isequal
rekursiv aufruft.
Es kann sogar argumentiert werden, dass == die Tatsache ignorieren sollte, dass NaNs numerisch nicht gleich sind, da es sich nicht wirklich um einen numerischen Vergleich handelt.
NaN-Literal ist kein NaN-Wert, ja
Sehr guter Punkt. Die wirkliche Lösung besteht wahrscheinlich darin, dass ==
auf Exprs isequal
verwendet, um Elemente zu vergleichen.
Hilfreichster Kommentar
NaN-Literal ist kein NaN-Wert, ja