1717"""
1818$(TYPEDEF)
1919
20- A named variable which represents a numerical value. The variable's value may
21- be known (parameters, independent variables) or unknown (dependent variables).
20+ A named variable which represents a numerical value.
2221
2322# Fields
2423$(FIELDS)
2524"""
26- struct Variable <: Function
25+ struct Variable{T} <: Function
2726 """ The variable's unique name."""
2827 name:: Symbol
29- """
30- Whether the variable's value is known.
31- """
32- known:: Bool
33- Variable (name; known = false ) = new (name, known)
28+ Variable (name) = new {Number} (name)
29+ Variable {T} (name) where T = new {T} (name)
30+ function Variable {T} (name, indices... ) where T
31+ var_name = Symbol (" $(name)$(join (map_subscripts .(indices), " ˏ" )) " )
32+ Variable {T} (var_name)
33+ end
3434end
35- function Variable (name, indices... ; known = false )
35+
36+ function Variable (name, indices... )
3637 var_name = Symbol (" $(name)$(join (map_subscripts .(indices), " ˏ" )) " )
37- Variable (var_name; known = known )
38+ Variable (var_name)
3839end
3940
41+ vartype (:: Variable{T} ) where T = T
4042(x:: Variable )(args... ) = Operation (x, collect (Expression, args))
4143
42- Base. isequal (x:: Variable , y:: Variable ) = ( x. name, x . known) == ( y. name, y . known)
44+ Base. isequal (x:: Variable , y:: Variable ) = x. name == y. name
4345Base. print (io:: IO , x:: Variable ) = show (io, x)
4446Base. show (io:: IO , x:: Variable ) = print (io, x. name)
4547function Base. show (io:: IO , :: MIME"text/plain" , x:: Variable )
46- known = x. known ? " known" : " unknown"
47- print (io, x. name, " (callable " , known, " variable)" )
48+ print (io, x. name)
4849end
4950
5051
@@ -79,7 +80,7 @@ Base.convert(::Type{Expr}, c::Constant) = c.value
7980
8081
8182# Build variables more easily
82- function _parse_vars (macroname, known , x)
83+ function _parse_vars (macroname, type , x)
8384 ex = Expr (:block )
8485 var_names = Symbol[]
8586 # if parsing things in the form of
@@ -97,9 +98,9 @@ function _parse_vars(macroname, known, x)
9798 @assert iscall || isarray || issym " @$macroname expects a tuple of expressions or an expression of a tuple (`@$macroname x y z(t) v[1:3] w[1:2,1:4]` or `@$macroname x, y, z(t) v[1:3] w[1:2,1:4]`)"
9899
99100 if iscall
100- var_name, expr = _construct_vars (_var. args[1 ], known , _var. args[2 : end ])
101+ var_name, expr = _construct_vars (_var. args[1 ], type , _var. args[2 : end ])
101102 else
102- var_name, expr = _construct_vars (_var, known , nothing )
103+ var_name, expr = _construct_vars (_var, type , nothing )
103104 end
104105 push! (var_names, var_name)
105106 push! (ex. args, expr)
@@ -108,45 +109,45 @@ function _parse_vars(macroname, known, x)
108109 return ex
109110end
110111
111- function _construct_vars (_var, known , call_args)
112+ function _construct_vars (_var, type , call_args)
112113 issym = _var isa Symbol
113114 isarray = isa (_var, Expr) && _var. head == :ref
114115 if isarray
115116 var_name = _var. args[1 ]
116117 indices = _var. args[2 : end ]
117- expr = _construct_array_vars (var_name, known , call_args, indices... )
118+ expr = _construct_array_vars (var_name, type , call_args, indices... )
118119 else
119120 # Implicit 0-args call
120121 var_name = _var
121- expr = _construct_var (var_name, known , call_args)
122+ expr = _construct_var (var_name, type , call_args)
122123 end
123124 var_name, :($ var_name = $ expr)
124125end
125126
126- function _construct_var (var_name, known , call_args)
127+ function _construct_var (var_name, type , call_args)
127128 if call_args === nothing
128- :(Variable ($ (Meta. quot (var_name)); known = $ known )())
129+ :(Variable {$type} ($ (Meta. quot (var_name)))())
129130 elseif ! isempty (call_args) && call_args[end ] == :..
130- :(Variable ($ (Meta. quot (var_name)); known = $ known ))
131+ :(Variable {$type} ($ (Meta. quot (var_name))))
131132 else
132- :(Variable ($ (Meta. quot (var_name)); known = $ known )($ (call_args... )))
133+ :(Variable {$type} ($ (Meta. quot (var_name)))($ (call_args... )))
133134 end
134135end
135136
136- function _construct_var (var_name, known , call_args, ind)
137+ function _construct_var (var_name, type , call_args, ind)
137138 if call_args === nothing
138- :(Variable ($ (Meta. quot (var_name)), $ ind... ; known = $ known )())
139+ :(Variable {$type} ($ (Meta. quot (var_name)), $ ind... )())
139140 elseif ! isempty (call_args) && call_args[end ] == :..
140- :(Variable ($ (Meta. quot (var_name)), $ ind... ; known = $ known ))
141+ :(Variable {$type} ($ (Meta. quot (var_name)), $ ind... ))
141142 else
142- :(Variable ($ (Meta. quot (var_name)), $ ind... ; known = $ known )($ (call_args... )))
143+ :(Variable {$type} ($ (Meta. quot (var_name)), $ ind... )($ (call_args... )))
143144 end
144145end
145146
146147
147- function _construct_array_vars (var_name, known , call_args, indices... )
148+ function _construct_array_vars (var_name, type , call_args, indices... )
148149 :(map (Iterators. product ($ (indices... ))) do ind
149- $ (_construct_var (var_name, known , call_args, :ind ))
150+ $ (_construct_var (var_name, type , call_args, :ind ))
150151 end )
151152end
152153
@@ -157,20 +158,11 @@ $(SIGNATURES)
157158Define one or more unknown variables.
158159"""
159160macro variables (xs... )
160- esc (_parse_vars (:variables , false , xs))
161- end
162-
163- """
164- $(SIGNATURES)
165-
166- Define one or more known variables.
167- """
168- macro parameters (xs... )
169- esc (_parse_vars (:parameters , true , xs))
161+ esc (_parse_vars (:variables , Number, xs))
170162end
171163
172164function rename (x:: Variable ,name:: Symbol )
173- Variable (name,known = x . known )
165+ Variable {vartype(x)} (name )
174166end
175167
176168TreeViews. hastreeview (x:: Variable ) = true
0 commit comments