request for new functions: `isvariable` and `variablename`
Opened this issue · 4 comments
I want to be able to convert any TermInterface.jl expression to one of the expression types defined by my CallableExpressions.jl package. However, I don't think that TermInterface.jl on its own currently makes that possible. The problem is that, for leaves of the expression tree, I'm not able to:
-
tell variables apart from constants
-
convert a foreign variable type to a native variable type, for that I need to associate the variable with a name, as each variable is determined by a single
Symbol
value in CallableExpressions.jl
I think it'd make sense for TermInterface.jl to introduce two additional functions:
-
isvariable
(name subject to bikeshedding, of course):isvariable(x)
should betrue
whenx
is a single variable, and it should befalse
whenx
is a constant or an expression (neither constant expressions nor variable expressions count as "a variable" here) -
variablename(x)
should return an object representing a unique name for the variable, ideally convertible toSymbol
Thoughts?
I think it's generally a good idea, but we don't definitely want to define isvariable(x::Symbol) = true
, because in Expr
we won't know when a symbol is used as a variable or not. It depends on the context. I suggest to not include it in TermInterface.jl
because it really does depend on the language being used.
In Metatheory.jl I'm having
# TODO: document
Base.@inline maybe_quote_operation(x::Union{Function,DataType}) = nameof(x)
Base.@inline maybe_quote_operation(x::Symbol) = x
we don't definitely want to define
isvariable(x::Symbol) = true
Agree.
I think this is fine. Since it's an interface addition it would be non-breaking to add.