Возможно, сравнение AST — не очень распространенная операция, но я наткнулся на следующее, что меня удивило. Я думаю, даже спорно, что ==
должен игнорировать тот факт, что NaN численно не равны сами себе, поскольку это не совсем численное сравнение.
julia> :(f($NaN)) == :(f($NaN))
false
julia> isequal(:(f($NaN)), :(f($NaN)))
false
Похоже, нам нужен метод isequal
для Expr, который рекурсивно вызывает isequal
.
можно даже утверждать, что == следует игнорировать тот факт, что NaN численно не равны сами себе, поскольку это не совсем численное сравнение.
Литерал NaN не является значением NaN, да
Очень хороший момент. Реальное решение, вероятно, состоит в том, чтобы ==
в Exprs использовать isequal
для сравнения элементов.
Самый полезный комментарий
Литерал NaN не является значением NaN, да